• ベストアンサー

fscanf/fprintfでのファイルの読み書き

以下のようなプログラムでファイルを使ったデータの読み書きをしているのですが、 fscanfの所で永久ループになってしまい、またファイルの最後の部分のみを 出力するという動作になってしまい困っています。 ソースを何度読み直してもどこがおかしいのかわかりません。 何か心当たりのある方どうかご教授下さい。お願いいたします。 #include <stdio.h> #include <stdlib.h> void main() { char in_name[10]; int in_ten,w_goukei=0; FILE *gf_pt; if((gf_pt=fopen("gakusei.dat","w+"))==NULL) { printf("FILE OPEN ERROR\n"); exit(EXIT_FAILURE); } printf("データを入力してください(終了は^Z)\n"); rewind(stdin); while((scanf("%s %d",in_name,&in_ten))!=EOF) fprintf(gf_pt,"%-10s %3d",in_name,in_ten); printf("\nデータを表示します\n"); rewind(gf_pt); while(fscanf(gf_pt,"%-10s %3d",in_name,&in_ten)!=EOF) { w_goukei+=in_ten; printf("%-10s %3d\n",in_name,in_ten); } printf(" %4d\n",w_goukei); if(fclose(gf_pt)==EOF) { printf("FILE CLOSE ERROR\n"); exit(EXIT_FAILURE); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.1

fscanfの書式指定の-を取り除いてください。

noname#15820
質問者

お礼

gimmickさんのおっしゃるどおりやってみたところ上手く動きました!テキストどおり打っているのに動かないとは変な話です…(^^;)ありがとうございました!

その他の回答 (1)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.2

さぞお困りでしょうけど、、、無理もないことと思います。 scanf()系のライブラリ関数はよほどのことがない限り使用すべきではありません。 なぜなら、挙動が非常に複雑で、特に人間の手による入力など不確定要素があると予想外の挙動を示すこともありとても動作不安定なプログラムになってしまうからです。 だからこそ、『ソースを何度読み直してもどこがおかしいのかわかりません』となってしまうのです。。。 通常は、文字列入力ならfgets() 数値入力ならfgets()にatoi()をかますのが一般によく使われる方法です。

noname#15820
質問者

お礼

なるほど~。今は勉強中なので、本を見ながら片っ端からプログラムを打っているのですが、実用的なものになるとそうゆうことも考慮に入れないといけないのですね。どうもありがとうございました!

関連するQ&A