如果字符作为输入而不是整数给出,则scanf如何工作

时间:2016-09-23 04:14:20

标签: c

do
{
    printf("minutes: ");
    scanf("%d", &minutes);
}while(minutes < 1);

对于上面的代码,如果分钟给出一些字符,那么分钟的值为“2”。 如果某个负整数首先作为输入给出一个字符,则语句“minutes:”会重复无限次。

我在codeblocks中运行了这个程序。为什么会这样?

2 个答案:

答案 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)

在这种情况下返回0scanf()函数返回匹配的格式说明符的数量。在这种情况下,没有匹配,因此它返回0

如果您在调用number之前初始化scanf()然后无法返回0,那么您在初始化number时使用的值在调用之后不会发生变化scanf()

如果您没有初始化number,那么尝试读取该值是未定义的行为。它将具有不确定的值,因此您无法预测它将是哪个值。