• ベストアンサー

ファイル出力で改行を入れたい!

data.txtにファイル出力を行うのですが、gets(c)で入力した一語一語に改行を入れてdata.txtに出力したいのですがどうすればよいでしょうか。 返答のほどよろしくお願いいたします。 include<stdio.h> #define SIZE 20 void main(void) { char c[SIZE], *p; FILE *fp; fp = fopen("data.txt","w+"); p = c; while(gets(c) != NULL){ fputs(p,fp); } fclose(fp); printf("data.txtへ出力しました\n"); }

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

  • ベストアンサー
  • catby
  • ベストアンサー率65% (50/76)
回答No.3

一語一語ってのは、1回の入力毎って事でしょうか? とするならば、これでどうでしょうか? #include <stdio.h> #define SIZE 20 void main(void) {   char c[SIZE], *p;   FILE *fp;      fp = fopen("data.txt","w+");   p = c;   while(gets(c) != NULL){     fputs(p,fp);     fputc('\n', fp);   }      fclose(fp);   printf("data.txtへ出力しました\n");    }

yukikundesuyo
質問者

お礼

返答ありがとうございます。私も考えたらこのやり方にぶち当たりました。

その他の回答 (3)

  • ency
  • ベストアンサー率39% (93/238)
回答No.4

素直に fprintf() を使ってみてはいかがですか? あと、細かいところをいうと、main() 関数は戻り値が int です。 それから、今後のことを考えると gets() よりも fgets() を使う習慣をつけておいた方が良いと思います。 gets() だとサイズの指定ができないため、用意している領域サイズ以上でも読み込んでしまいます。 バッファオーバランというバグを仕込んでしまうことになります。 fgets() だとサイズの指定ができるため、指定サイズ以上読み込むことはありません。 この例の場合だと、最大19文字まで読み込み、終端の '\0' は勝手につけてくれます。 あ、そうか。 gets() と違って、fgets() は改行を捨てないので、今回の場合はそのまま表示すれば良いのか。。。 …ま、そんな偶然もあります。 ------------------------------------------------ #include<stdio.h> #define SIZE 20 int main(void) { char c[SIZE], *p; FILE *fp; fp = fopen("data.txt","w+"); p = c; while(fgets(c,SIZE,stdin) != NULL){ /* fgets() の場合、改行は残るので p のみ表示 */ fprintf(fp,"%s",p); } fclose(fp); printf("data.txtへ出力しました\n"); return 0; } ------------------------------------------------ やりたいことは、こんなことで良いですか?

yukikundesuyo
質問者

お礼

返答ありがとうございます。fprintf() の使い方が分かり勉強になりました。やりたいことはNo3のような方法です。

  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

一語一語って ABC なら A\nBA\nCA\n ってことですか? int i; char cOut[2]; while(gets(c) != NULL){ for(i = 0; 0 < strlen(c) ; i++) { cOut[0] = c[i]; cOut[1] = 0x00; fputs(cOut,fp); } } でどうでしょうか (全角を考慮していません あしからず)

yukikundesuyo
質問者

お礼

返答ありがとうございます。私はANo.3のやり方を求めていました。

回答No.1

なにをもって'語'としますか? '語を区切るもの'はなんですか? 読み込んだ文字列をアタマから検索し、'語を区切るもの'を見つけて改行に置き換えてから出力すればいい。