有人可以帮助我理解为什么第一个输入为'K'时scanf不会要求我提交第二个输入吗?
int n=0;
scanf("%d",&n);
scanf("%d",&n);
就好像它从其他地方得到了输入!在这种情况下,n的值是什么?
答案 0 :(得分:0)
如果我们检查scanf()
返回值,则显示0
#include <stdio.h>
int main(int argc, char **argv)
{
int n=0;
int retvalue=0;
retvalue = scanf("%d",&n);
printf("first scanf() return: %d\n", retvalue);
retvalue = scanf("%d", &n);
printf("seconf scanf() return: %d\n", retvalue);
return 0;
}
scanf()在opengroup网站上的文档
这些函数应返回成功匹配的数量,并且 分配的输入项; 如果数字过早,此数字可以为零 匹配失败。
输入字符值并将scanf()
函数设置为mach / accept "%d"
(十进制数)时,它会失败。
[评论后编辑]
如果第一个scanf()
与格式规范不匹配,则输入不会被使用,而是保留在输入缓冲区中。
换句话说,不匹配的字符保留在输入缓冲区中,第二个scanf()
将其用作输入,同样第二个也失败。
警告
fflush(stdin)
解决了这种错误行为,但由于stdin上的fflush()导致未定义的行为,因此请勿使用。
[Edit2]
在这种情况下,getchar()
调用将消耗stdin
中的剩余缓冲区。
int n=0;
int retvalue=0;
retvalue = scanf("%d",&n);
printf("first scanf() return: %d\n", retvalue);
if(!retvalue)
getchar();
retvalue = scanf("%d", &n);
printf("seconf scanf() return: %d\n", retvalue);
if(!retvalue)
getchar();