【发布时间】:2016-04-23 17:10:07
【问题描述】:
这是我面临的问题的一个例子:
void print() {
printf("Hello");
}
int main() {
char a[LENGTH]; //LENGTH equals 20
printf("Please enter something: ");
fgets(a, LENGTH, stdin);
print();
return 0;
}
程序在屏幕上显示“请输入内容:”,并且不允许用户使用 fgets() 函数输入字符串。它直接移动到 print() 函数,因此在屏幕上打印 'Hello'。
为什么会这样?有什么办法可以解决吗?
编辑:
这段代码也会出现同样的问题:
void prints(){
printf("Hello world, how are you?");
}
int main() {
printf("blah\n");
printf("blah\n");
printf("blah\n");
printf("blah\n");
printf("blah\n");
printf("blah\n");//all these printfs are necessary.
printf("Enter a number: ");
fflush(stdout);
fflush(stdin);
int number;
scanf(" %d", &number);
printf("Please write something: \n");
char a[MAXSTRING];
fgets(a, MAXSTRING, stdin);
prints();
}
【问题讨论】:
-
你是如何运行你的程序的?
-
scanf()是你的问题,在这里,在输入流中留下一个换行符,fgets()然后消耗并立即返回。与printf()无关。不要将scanf()与fgets()混用。这个问题大约有一百万个重复。而fflush(stdin)是未定义的行为。 -
@PaulGriffiths 我完全同意,但这并不能解释第一个程序的问题。
-
@jdarthenay:第一个程序是假代码,不是他的真实代码。参见他对当前唯一答案的第一条评论:“我认为如果我只写一个像上面这样非常简单的程序,它就等于我遇到问题的那段代码。”
-
是的,第二个更接近我的真实代码。 gsamara 的答案对于第一个程序是 100% 正确的。