• ベストアンサー

ファイルの入出力について

猫 犬 豚 象 鳥 上記のようなテキストファイルを読み込んで 猫犬豚象鳥 のように1行にしてファイルに書き込むプログラムをつくりたいのですがうまくいきません、、 最初whileとfgetcをつかってEOFまで読み込んでfputcでかきこんだのですが この方法だと改行してしまったので whileのなかにif(c!='\n') をいれて改行コードならかきこまないようにしたのですが 実行してみると 猫■犬■豚■象■鳥 となります 実際にできたファイルの■はこれより小さいもので そのままここに貼り付けると 猫 犬 豚 象 鳥 となります。 改行コードを読み飛ばす方法わかるかたいたら 教えてください

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

  • ベストアンサー
  • sigint_m
  • ベストアンサー率42% (6/14)
回答No.2

おそらくwindowsで実行されていると推察します。 windowsで使用されている文字コード(sjis)の改行コードは「\r\n」の2バイトになっています。おそらく\nだけでなく\rも検出するようプログラムを書きなおせばよいと思います。

issei0428
質問者

お礼

回答ありがとうございます if(c!='\r')を追記することでうまくできました ありがとうございました

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ファイルを「テキストモード」でオープンすればいいような気がする。

  • t4t
  • ベストアンサー率55% (47/84)
回答No.1

fgetc、fputcではなく、fgets、fputsをお使いになったらいかがでしょうか。 改行は、OSによっては「LF」1文字ではなく「CR」('\r')「LF」('\n')2文字になったりします。 そのため、改行まで(改行を除いて)読み込むようなライブラリ関数fgetsをお使いになり、それで読み取った文字列をそのままfputsで書き込むほうがいいのではないかと思いますよ。 バッファサイズなどにはご注意ください。

issei0428
質問者

お礼

回答ありがとうございます 最初fgets fputsをつかっていたのですが 改行されてしまい、一行で出力できませんでした そのため一文字ずつ読み出すfputcなどを使いました。 なんとかすればfgetsなどでも同様の動作をするプログラムはつくれそうですね、、、

関連するQ&A