掲示板クイズ解答

fscanfを使ってデータファイル(test.dat)から数値を読み込むプログラムを作りましたが、3, 5という行が表示され続けプログラムが終了しません。 どこに問題があるのか考えてみてください。


#include <stdio.h>

main ()
{
	FILE  *fp;
	int   a, b;

	if((fp = fopen("test.dat", "r")) == NULL)
		return;
	while(fscanf(fp, "%d %d\n", &a, &b) != EOF){
		printf("%d, %d\n", a, b);
	}
	fclose(fp);
}


test.datの内容
1 23
3 44
3 5O
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...

while(fscanf(...) != EOF)のような書き方は時々見かけますが、これでは入力するデータに間違いがあると無限ループになってしまいます。
実は、このデータにも誤りがあり3行目に50と入力したかったのに0(ゼロ)と(オー)が間違っています。
さいわいfscanfは読み込んだデータの数を返してくるので、それが2でなければエラーとしてループを抜けるようにすれば一応使えるプログラムになります。 ただし、fscanf関数ではエラーチェックが甘くなるのでfgets関数などでデータを読み込み、それを処理していく方法が良いと思います。

C言語学習塾のホームページに戻る

Copyright(C) 2000 潟Iーキッド
お問い合わせ先