こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

fgetsでの入力に関して

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

投稿日時 - 2005-10-25 10:49:23

QNo.1734558

暇なときに回答ください

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

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

printf("%s", buf); // あるいは printf("%s\n", buf); など
とか、
puts(buf);
で表示しましょう。

投稿日時 - 2005-10-25 11:19:42

補足

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

投稿日時 - 2005-10-25 12:09:24

お礼

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

投稿日時 - 2005-10-25 15:47:11

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問