控制台输入C
我是C语言的初学者,想知道我的代码有什么问题:控制台输入C,c,input,console,scanf,C,Input,Console,Scanf,我是C语言的初学者,想知道我的代码有什么问题: #include "stdio.h" int main(void) { int a; printf("Please input an integer value: "); scanf("%d", &a); printf("You entered: %d\n", a); return 0; } 我的问题是,在进行任何控制台输出之前,我必须键入一个值,例如,如果我键入7,我将得到以下控制台输出:
#include "stdio.h"
int main(void)
{
int a;
printf("Please input an integer value: ");
scanf("%d", &a);
printf("You entered: %d\n", a);
return 0;
}
我的问题是,在进行任何控制台输出之前,我必须键入一个值,例如,如果我键入7,我将得到以下控制台输出:请输入一个整数值:您输入了:7
我在另一台计算机上尝试了完全相同的代码,效果很好,我想这是缓冲区问题吧?但是我不知道怎么修理它。。有什么想法吗 正如前面提到的,为了保证代码中的该行将在该点打印,您可以像这样刷新标准输出
#include "stdio.h"
int main(void)
{
int a;
printf("Please input an integer value: ");
fflush(stdout);
scanf("%d", &a);
printf("You entered: %d\n", a);
return 0;
}
你可以阅读这篇文章了解更多细节
由于@Osiris comments更新,您需要打印换行符,或者刷新
stdout
,因为它是缓冲的:fflush(stdout)代码>谢谢你,克里斯蒂安,这很有效!但是我可以有更多的细节吗?为什么它能在我朋友的电脑里工作,而在我的电脑里却不能工作?我每次都要这样做吗?在某些环境中,stdio缓冲区会在输入函数上自动刷新,例如scanf()
或fgets()
,但这不是你可以依赖的。好吧,这很清楚!谢谢大家!!有些系统会在输出换行符时刷新缓冲区,但您不会在scanf
之前写入缓冲区。在这种情况下,这并不重要。不。但事实并非如此,从scanf()
您的输入无论如何都会看到,要隐藏输入,您必须使用带屏蔽的函数。只有在printf()
中才能看到输出本身。可能有用的方法是在第二次printf inc后放置另一个fflush()
,以防代码增长。或者如链接中所述,只需将缓冲区设置为0:setbuf(stdout,NULL)代码>你完全正确。第一个printf可能发生在请求输入的scanf()之后。由于我的评论不适用于更新的答案,我将删除它们。