Printf在while循环中执行两次

时间:2018-08-24 11:23:59

标签: c while-loop

以非常简单的程序为例。

#include <stdio.h>

void main()
{
        int c; // has to be int so it's large enough to hold EOF
        printf("Please press EOF (C^D in Linux)\n");
        while ((c = getchar()) != EOF)
                printf("That's not EOF! Try again.\n"); // why is this printed twice?
        printf("EOF is ");
        putchar(c);
        printf(".\n");
}

问题也很简单:为什么第8行执行两次?它不应该这样工作吗:

  1. 从用户那里获取输入,并将该值分配给变量c
  2. 检查c是否不是EOF
  3. 如果不是,请打印那不是EOF!再试一次。转到步骤1。
  4. 如果是,则打印 EOF为[无论EOF是什么]。
  5. 终止程序。

相反,步骤3是:

  1. 如果不是,请打印那不是EOF!再试一次。两次。转到步骤1。

令人困惑的问题。有人会向我解释为什么会这样以及如何解决吗?

0 个答案:

没有答案