我在自学C。我的背景是Java。
我正在编写一个简单的控制台应用程序,该应用程序应提示用户输入一个数字,然后告诉用户他打印了哪个数字,然后提示他输入另一个数字。如果用户输入0,程序将退出。

我的代码不符合我的期望。这是代码:

#include <stdio.h>

int main() {
    while (1) {
        printf("Please enter a number: ");
        int this_is_a_number = 0;
        scanf("%d", &this_is_a_number);
        printf("You entered %d\n", this_is_a_number);
        if (this_is_a_number == 0) {
            break;
        }
        getchar();
    }
    return 0;
}

程序启动时,不会提示我输入数字。它确实允许我输入。打入return之后,它让我输入另一个,依此类推,直到我返回0。然后它将原来应该打印的所有内容打印出来,然后退出。

因此,例如,如果我启动该程序,然后键入7890,每输入一次返回值,控制台应如下所示:
Please enter a number:
7
You entered 7
Please enter a number:
8
You entered 8
Please enter a number:
9
You entered 9
Please enter a number:
0
You entered 0

但是,它看起来像这样:
7
8
9
0
Please enter a number:
You entered 7
Please enter a number:
You entered 8
Please enter a number:
You entered 9
Please enter a number:
You entered 0

我对C中的流程不了解什么?

最佳答案

这可能是由于输出被缓冲的事实引起的。尝试在每个printf之后用fflush刷新缓冲区,例如:

printf(...);
fflush(stdout);
scanf(...);

您甚至可以通过 setbuf(stdout, NULL) 直接禁用缓冲。

关于c - 简单的C流未按预期流动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21172813/

10-16 08:34