为什么fputc和fputs输出不会立即显着?

Mau*_*ice 0 c

我正在写一个C程序,但没有看到一个fputcfputs调用的结果.我需要帮助才能理解为什么会这样.

#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;
}
Run Code Online (Sandbox Code Playgroud)

问题是,fputc并且fputs不能正常工作.我在mac lion 64 bit上,并在终端上使用make./file_name.

在while循环中,如果我写

putchar(input1);
Run Code Online (Sandbox Code Playgroud)

它输出(打印)到终端.但是,所有注释行都不起作用.

fputc(input1, stdout); 
Run Code Online (Sandbox Code Playgroud)

还在终端上打印一个空白行.

该程序创建一个文件,但似乎完全是空的.可能是什么问题呢?

rod*_*igo 7

你是否仍在开放时查看文件的内容?请注意,文件写入是缓冲的,因此在关闭/刷新流之前,您可能无法看到数据.

如果是这种情况,您可以尝试调用fflush(stream)循环中的最后一行.或者等到文件关闭,当然.

另请注意,如果使用Ctrl-C结束程序,则可能永远不会写入数据!

不同之处在stdout于此流通常是行缓冲的,这意味着无论何时输出新行字符,流都会自动刷新,但普通流不会.