如果以字符代替整数作为输入,scanf如何工作 do { printf(“分钟:”); 扫描频率(“%d”,分钟(&M); }而(分钟

如果以字符代替整数作为输入,scanf如何工作 do { printf(“分钟:”); 扫描频率(“%d”,分钟(&M); }而(分钟,c,C,对于上述代码,如果分钟被赋予某些字符,则分钟的值为“2”。 如果先输入一个负整数,然后输入一个字符,则语句“分钟:”将重复无限次 我用代码块运行这个程序。为什么会发生这种情况?在本例中,它返回0。scanf()函数返回匹配格式说明符的数目。在本例中,无匹配项,因此返回0 如果在调用scanf()之前初始化number,然后返回0失败,则在调用scanf()后,用于初始化number的值不会更改 如果不初始化编号,则尝试读取该值是未定义的行为。它将有一个不确定的值,因此您无法预测它将是哪个值。sc

对于上述代码,如果分钟被赋予某些字符,则分钟的值为“2”。 如果先输入一个负整数,然后输入一个字符,则语句“分钟:”将重复无限次


我用代码块运行这个程序。为什么会发生这种情况?

在本例中,它返回
0
scanf()
函数返回匹配格式说明符的数目。在本例中,无匹配项,因此返回
0

如果在调用
scanf()
之前初始化
number
,然后返回
0
失败,则在调用
scanf()
后,用于初始化
number
的值不会更改

如果不初始化编号,则尝试读取该值是未定义的行为。它将有一个不确定的值,因此您无法预测它将是哪个值。

scanf(“%d”,&minutes)
将不会读取字符的值。
minutes
中的值将保持不变。该字符将保留在缓冲区中,scanf将继续尝试读取该字符,并继续失败

scanf
的返回值将是读取的元素数,因此如果输入字符,返回值将为0,这可用于中断循环

do
{
    printf("minutes: ");
    scanf("%d", &minutes);
}while(minutes < 1);
do
{
printf(“分钟:”);
ret=scanf(“%d”,分钟)(&min);
如果(ret!=1)
打破
}而(分钟<1);

由于罕见的输入错误,当
scanf()
返回
EOF
时,会出现尝试使用
number
先前值的弱点。未定义编号的状态。最好使用
scanf()
和friends的返回值来引导逻辑,而不是先前的值。
do
{
  printf("minutes: ");
  ret = scanf("%d", &minutes);
  if (ret != 1)
     break;
}while(minutes < 1);