0

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

#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不能fputs正常工作。我在 mac lion 64 位上,并在终端上使用makeand 。./file_name

在while循环中,如果我写

putchar(input1);

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

fputc(input1, stdout); 

还会在终端上打印一个空行。

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

4

3 回答 3

7

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

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

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

不同之stdout处在于这个流通常是行缓冲的,这意味着只要你输出一个换行符,流就会自动刷新,但普通流不是。

于 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 回答
-2

我有同样的问题。您需要使用文件的完整路径。转到 Finder 并在双击文件后按选项键获取文件的路径名。然后它应该工作。

让我知道这是否是问题所在。

于 2022-01-12T18:37:26.077 回答