アプリ版:「スタンプのみでお礼する」機能のリリースについて

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");

}

A 回答 (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");
  
}
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/12/12 11:19

素直に 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;
}
------------------------------------------------

やりたいことは、こんなことで良いですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/12 11:24

一語一語って


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);
}
}
でどうでしょうか
(全角を考慮していません あしからず)
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/12 11:21

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています