以下是一个简单的C程序:
#include <stdio.h>
int main(void)
{
//Question 2.16
//Variables that will be used to store the two numbers
int num1;
int num2;
//Message to prompt the user
printf ("Enter two numbers\n");
//Accepting the users input
scanf("%d %d" , &num1, &num2);
if (num1 > num2) {
printf("%d is greater\n", num1); // Print num1 if num1 is greater
}
else { //Otherwise print that num1 is not greater
printf("%d is not greater\n", num1);
}
return 0; // End of program
}
但是,当我构建并运行程序(我使用的IDE是Eclipse Cpp Neon)时,必须在执行第一个printf语句之前输入变量num1和num2的值。有关控制台输出,请参见以下内容:
2 5 Enter two numbers 2 is not greater
我的问题很简单:为什么会这样?欢迎任何解释。
答案 0 :(得分:3)
printf(...)
函数将输出放入输出流的缓冲区。因此有时可能会在一段时间后显示输出。
scanf(...)
功能使用输入流。
这两个函数都涉及独立的流,并且由于缓冲,每个代码的结果似乎不连续。强制冲洗任何流
int fflush(FILE *stream);
被使用。
请使用
fflush(stdout);
在打印语句后获得所需的输出。
答案 1 :(得分:1)
我的建议如下:
(1)显式使用而不是隐式使用流:例如,首选fprintf(stdout, "Enter two numbers\n"); fflush(stdout);
代替 printf ("Enter two numbers\n");
。对scanf
函数应用相同的规则-即,首选fscanf
和您使用的流(例如stdin
)。
(2)一次{strong>不不要对一个scan
函数进行多次调味,这可能会导致流以无法计算的意外方式发生故障:因此,建议fscanf(stdin, "%d", &num1); fscanf(stdin, "%d", &num2);
代替 scanf("%d %d", &num1, &num2);
。
答案 2 :(得分:-1)
尝试在fflush
和printf
语句之间使用scanf
:
// Message to prompt the user
printf("Enter two numbers\n");
fflush(stdout);
// Accepting the user's input
scanf("%d %d", &num1, &num2);