• ベストアンサー

ファイルの入出力プログラムについて

san.txtに(I can do it )と書いて以下のプログラムを実行したらメ噫|リ メ噫|リ メ噫|リ メ噫|リ メ噫|リ メ噫| とバグってしまいました。なぜですか? #include <stdio.h> #include <stdlib.h> main () { FILE *outfp; char str[256];    if (( outfp = fopen("san.txt", "w"))       ==NULL) { printf("ファイルオープンエラー\n"); exit(1); } while(fputs(str, outfp)){ printf("%s", str); } fclose(outfp); return 0; }

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

  • ベストアンサー
回答No.4

商品管理のプログラムということは、 データを追記していくプログラムを作りたいのですか? その場合でしたら、"w"を"a"にして追加書き込みできます。 書き込みの際は  sprintf( str, "I can do it\n" ); という様にstrに文字列を代入してから  fputs( str, outfp ) でsan.txtに書き込むことができます。 なにぶん、そちらの疑問点が把握できませんでしたので 予想で書いていますが、これでよろしいでしょうか^_^;

code55
質問者

お礼

お~なるほど!!やってみます!! あんな書き方したら、バグってしまうのも仕方ないですね。お忙しい中、有難うございました!! また、よろしくお願いいたします。

その他の回答 (3)

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.3

#1です。 「san.txtに文字を書き込むというものです。」 だったら、「str」に値を設定して「fputs」でしょうね。 「printf」でstrを参照しているので文字化けしています。 こちらを参考にして頑張ってください。 http://www.bohyoh.com/CandCPP/C/Library/index.html

参考URL:
http://www.bohyoh.com/CandCPP/C/Library/index.html
code55
質問者

お礼

文字化けしていたんですか~。参考URLまで紹介していただき、まさに鬼に金棒です。ありがとうございました。また、よろしくお願いいたします!!

回答No.2

まず、ファイルオープンの部分ですが、 ここが書き込みモードになっています。  if((outfp = fopen("san.txt","w")) == NULL ) これではsan.txtに書き込まれた内容を読むことはできません。 これを  if((outfp = fopen("san.txt","r")) == NULL ) に変更してください。 次に読み込み部分ですが、 edominさんの言うとおり、fgets()を使います。 fputs()は書き込む関数なので、 この  fputs( str, outfp ) の部分を  fgets( str, 256, outfp ) に変更してください。 これで貴方のやろうとしていた事ができるはずですよ(^_^)

code55
質問者

補足

質問の仕方が悪かったです。すいません。 私が知りたかったのは、san.txtに文字を書き込むというものです。最終的には、商品管理のプログラムを書く予定です。"W"は書き込み専用と書いてあったので、ああなってしまったというわけです。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

「str」の中身が不定だからです。 「fgets」の間違い?かな。

関連するQ&A