为什么程序不停止在第4行接受输入?
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%d",&c1); // line 3
printf("Enter other char: ");
scanf("%d", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
我从一本书中读到了这个问题,在上面的第4行,scanf()不是在执行,但是为什么呢?
发布于 2014-03-07 16:19:21
%d
希望从输入中读取一串数字,这样它就可以形成一个整数,并将结果存储到您传递的指针中(在本例中这是无效的,因为您提供了一个指向char的指针,但无论如何,这与此无关)。
问题是,如果您输入一个字符,scanf()
会注意到输入中没有有效的数字。它将读取此字符,将其推回输入,并提前返回。这发生在第3行。由于该字符是向后推回的,第4行将再次从输入中检索相同的字符,并看到输入中没有有效的整数,因此相同的字符将再次被推回。
这里要记住的关键一点是,scanf
在输入无效的情况下过早返回,而输入流不受影响。
例如,如果stdin
保存字符a
,则第3行的scanf()
将从输入中检索a
。它看到这不能是一个有效的数字,因此a
“返回”到stdin
,scanf()
返回。在第4行,scanf
调用将执行相同的任务:它从输入中选择下一项,即相同的a
,并提前返回。在使用此字符之前,整数的扫描将无法工作。例如,如果在第3行之后调用getchar()
,就会使用有问题的字符,而第4行的scanf()
将等待输入。
发布于 2014-03-07 16:21:27
scanf
对换行符有问题。解决这一问题的一种快速而肮脏的方法是在%c
之前添加一个空格或一个%c
,以绕过这个.
printf("Enter a char: ");
scanf(" %c",&c1); // line 3
printf("Enter other char: ");
scanf(" %c", &c2); // line 4
发布于 2014-03-07 17:27:14
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter other char: ");
scanf("%c", &c2); // line 4
用%c更改%d (从十进制改为字符)
https://stackoverflow.com/questions/22255087
复制相似问题