Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制台输入C_C_Input_Console_Scanf - Fatal编程技术网

控制台输入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,我将得到以下控制台输出:

我是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,我将得到以下控制台输出:请输入一个整数值:您输入了: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()之后。由于我的评论不适用于更新的答案,我将删除它们。