- ベストアンサー
ファイル出力で改行を入れたい!
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"); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一語一語ってのは、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"); }
その他の回答 (3)
- ency
- ベストアンサー率39% (93/238)
素直に 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; } ------------------------------------------------ やりたいことは、こんなことで良いですか?
お礼
返答ありがとうございます。fprintf() の使い方が分かり勉強になりました。やりたいことはNo3のような方法です。
- nagare
- ベストアンサー率33% (280/831)
一語一語って 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); } } でどうでしょうか (全角を考慮していません あしからず)
お礼
返答ありがとうございます。私はANo.3のやり方を求めていました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
なにをもって'語'としますか? '語を区切るもの'はなんですか? 読み込んだ文字列をアタマから検索し、'語を区切るもの'を見つけて改行に置き換えてから出力すればいい。
お礼
返答ありがとうございます。私も考えたらこのやり方にぶち当たりました。