do
{
printf("minutes: ");
scanf("%d", &minutes);
}while(minutes < 1);
对于上面的代码,如果分钟给出一些字符,那么分钟的值为“2”。 如果某个负整数首先作为输入给出一个字符,则语句“minutes:”会重复无限次。
我在codeblocks中运行了这个程序。为什么会这样?
答案 0 :(得分:4)
scanf("%d",&minutes)
不会读取该字符的值。 minutes
中的值将保持不变。该字符将保留在缓冲区中,scanf将继续尝试读取它并继续失败。
scanf
的返回值将是读取的元素数,因此如果您输入一个字符,它将为0,并且可以用来打破循环。
do
{
printf("minutes: ");
ret = scanf("%d", &minutes);
if (ret != 1)
break;
}while(minutes < 1);
答案 1 :(得分:0)
在这种情况下返回0
。 scanf()
函数返回匹配的格式说明符的数量。在这种情况下,没有匹配,因此它返回0
。
如果您在调用number
之前初始化scanf()
然后无法返回0
,那么您在初始化number
时使用的值在调用之后不会发生变化scanf()
。
如果您没有初始化number
,那么尝试读取该值是未定义的行为。它将具有不确定的值,因此您无法预测它将是哪个值。