プロが教えるわが家の防犯対策術!

C言語初心者です。ファイルの入出力とwhile文の練習で下のようなプログラムを書いていたのですが、
どうもwhile文のところで無限ループに陥っているようです。
feofで入力ファイルの終端をチェックしていると思うのですが、なぜwhile文が終わらないのか分かりません。初歩的な質問ですが、よろしくお願いします。

ちなみに入力ファイルはバイナリ形式の2次元データです。
===============================================
#include <stdio.h>

int main(int argc, char **argv){

char *input;
FILE *data;
int num;

input = argv[1];
data = fopen(input,"r");
if (data == NULL){
puts("file open error!!");
return 1;
}

while(!feof(data)){
num ++;
printf("%d\n",num);
}
fclose(data);

return 0;
}
===========================================

A 回答 (2件)

whileの中でファイルを読んでいないですね。



ファイルを読んでいませんから、feofは変化がないですね。

例えば getc(data) などを使ってファイルを読めばそのうちに終わりになります。
    • good
    • 0
この回答へのお礼

教えていただいた通りでした。
初歩的な質問にも関わらず、素早いご返答ありがとうございました。

お礼日時:2010/06/03 18:46

まずnumが初期化されていないのは問題。

ちゃんと初期化しましょう。

次に
>while(!feof(data)){
>num ++;
>printf("%d\n",num);
>}
>fclose(data);
この部分でファイルからデータを読んでいないから、ファイルポインタはインクリメントされないので、何時までもeofにたどり着かない。
どこかにfreadなりfgetがあればファイルポインタがインクリメントされるんだろうけどね。これでどうだろう?
    • good
    • 0
この回答へのお礼

素早いご返答ありがとうございました。
教えていただいたとおり、ファイルの読み込みを加えたらちゃんと止まりました。

お礼日時:2010/06/03 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!