为什么不能立即注意到fputc和fputs输出?

为什么不能立即注意到fputc和fputs输出?,c,C,我正在编写一个C程序,但没有看到fputc或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 dat

我正在编写一个C程序,但没有看到
fputc
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;
}
它输出(打印)到终端。 但是,所有注释行都不起作用

fputc(input1, stdout); 
同时在终端上打印一个空行


程序创建了一个文件,但似乎是完全空的。有什么问题吗?

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

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

还要注意的是,如果用Ctrl-C结束程序,数据可能永远不会被写入


stdout
的不同之处在于,此流通常是行缓冲的,这意味着每当您输出新行字符时,流将自动刷新,而普通流则不是。

可能是您遇到了问题,因为某些字符串不是以“\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;

您应该检查输出函数的返回值非常感谢!这帮了大忙@SML-不客气!但请记住,如果您发现答案令人满意,则应将其标记为已接受。字符串文字总是以null结尾。
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;