• ベストアンサー

fgetsでの入力に関して

fgets関数にてファイルの1行を入力したいのですが、 レコード内に%(パーセント)が入っているとこの文字が消えてしまいます。 例えば、(%) 累計 (%%) (K)\nのような入力をすると () 累計 (%) (K)\nとなってしまいます。 これを解決する方法はあるのでしょうか? 環境は OS:win xp pro コンパイラ:Microsoft Visual C++ .NET です。

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

  • ベストアンサー
  • e_watt
  • ベストアンサー率71% (25/35)
回答No.1

fget() で消えているのではなく(消えないはずです) fgets(buf); したものを、 printf(buf); のように表示させていませんか? printf() の第1引数は書式文字列なので、 '%' や '\' がエスケープされてしまいますよ。 printf("%s", buf); // あるいは printf("%s\n", buf); など とか、 puts(buf); で表示しましょう。

CHAKO_2005
質問者

お礼

解決しました。ありがとうございました。 結果は私のおばかでした。 入力ファイルをOPENしFGETSで1行入力した後 テンポラリファイルに出力し 再度テンポラリファイルをFGETSで一行入力してたの ですがこのテンポラリファイル入力時消えていたと思ったのです。 そうではなくテンポラリファイル出力時FPRINTFで出力していたのでここで消えていました。 お騒がせいたしました。

CHAKO_2005
質問者

補足

早速のご教授ありがとうございます。 やっぱり消えませんよね・・・ でも不思議なのですがfgetsの行でブレークしてエリアを確認すると%がないんですよ。 ちなみにソースは以下のような感じで書いてます。 プリンタに出力するプログラムです。 fgets(S1_inbuf,259,S1_infp); TextOut(S1_hdc,S1_x,S1_y,S1_inbuf,lstrlen(S1_inbuf));

関連するQ&A