0

fputcC プログラムを作成していますが、またはfputs呼び出しの結果が表示されません。なぜそれが起こっているのかを理解するのに助けが必要です。

#include <stdio.h>
int main(void)
{
  FILE *stream;
  int file_state;
  int input1=0;
  stream = fopen("data3.txt", "w");
  if (stream == NULL)
    puts("file open error");   
  puts("input data");
  while (input1 != EOF)
    {
      input1=fgetc(stdin);
      putchar(input1);
      //fputc(input1, stdout);
      //fprintf(stream, "tee");
      //fputc('A', stream);
      //fputs("sass", stream);
    }
  file_state=fclose(stream);
  if(file_state==EOF)
    puts("file close error");
  return 0;
}

問題は、正しく動作fputcfputsないことです。私はmac lion 64ビットを使用make./file_nameており、端末でおよびを使用しています。

whileループで、私が書くと

putchar(input1);

端末に出力(印刷)します。ただし、コメント行のすべてが機能するわけではありません。

fputc(input1, stdout); 

また、端末に空白行を出力します。

プログラムはファイルを作成しますが、完全に空のようです。何が問題なのですか?

4

3 に答える 3

7

ファイルがまだ開いている間にファイルの内容を見ていますか? ファイルの書き込みはバッファリングされるため、ストリームが閉じられるかフラッシュされるまでデータを表示できない場合があることに注意してください。

その場合はfflush(stream)、ループの最後の行として呼び出すことができます。もちろん、ファイルが閉じられるまで待ちます。

また、Ctrl-C でプログラムを終了すると、データがまったく書き込まれない可能性があることに注意してください。

との違いstdoutは、このストリームは通常line bufferedであることです。つまり、ストリームは改行文字を出力するたびに自動的にフラッシュされますが、通常のストリームはそうではありません。

于 2012-06-03T08:42:54.310 に答える
0

一部の文字列が '\0' で終了していないため、問題が発生している可能性があります。

stream = fopen("data3.txt\0", "w\0");
if (stream == NULL)
  puts("file open error\0");   
puts("input data\0");
while (input1 != EOF)
  {
    input1=fgetc(stdin);
    putchar(input1);
    //fputc(input1, stdout);
    //fprintf(stream, "tee\0");
    //fputc('A', stream);
    //fputs("sass\0", stream);
  }
file_state=fclose(stream);
if(file_state==EOF)
  puts("file close error\0");
return 0;
于 2012-06-03T11:42:42.217 に答える