为什么不能用"getc(f)) != EOF"直接比较呢?

Why can't use "getc(f)) != EOF" to compare directly?

我刚接触C语言,现在被这样的问题卡住了:为什么我用上面的表达式打印文件中的字符串会得到奇怪的结果?

情况是这样的:我有一个文件(data.txt),内容如下:

"Hello Everyone!!"

这是我的代码:

int main()
{
   FILE *ptr = fopen("data.txt", "r");

   if (ptr != NULL)
   {
      while (getc(ptr) != EOF)    //print all contents in data.txt
         printf("%c", getc(ptr));
   }
   else
      printf("Open file failed.");

   return 0;
}

执行结果为:

"el vroe!"

如果我先将 getc(ptr) 赋值给变量并进行比较,一切正常。

这两种方法有什么区别?

您在 while 的条件下提取第一个字符,然后在 printf 的条件下提取第二个字符。所以你在一个循环中只打印每个第二个字符。

如果需要,请执行以下操作:

int c;

while ((c = getc(ptr)) != EOF) {
printf("%c", c);
}

当然可以,但需要保存读取的字符。如果你不这样做,它就会丢失。

int main()
{
   FILE *ptr = fopen("data.txt", "r");

   if (ptr != NULL)
   {
      int c;
      while ((c = getc(ptr)) != EOF)    //print all contents in data.txt
         printf("%c", c);
   }
   else
      printf("Open file failed.");

   return 0;
}