C++中scanf()的行为

Behavior of scanf() in C++

本文关键字:scanf C++      更新时间:2023-10-16

当我输入字符串时,当scanf()期望浮点时,会发生什么?我以为这会是个例外,但我得到了无限循环。为什么,以及我如何控制?

好的,代码在这里

int main(){
    float f;
    scanf("%f", &f);
    cout << "f = " << f << endl;
    return 0;
}

scanf尽可能多地读取,但如果它到达输入的末尾或输入与规范不匹配,它就会停止。它返回它读取的项目数,如果它提前停止,那么这个数字将小于格式字符串中的说明符数,并且任何不匹配的输入仍将在输入缓冲区中以备将来读取。

例如:

如果您int count = scanf("%f", &val),并且输入为"1.23",则val将为1.23count将为1,并且输入将被消耗。

如果您使用int count = scanf("%f", &val),并且输入为"George",那么val将保持不变,count将为0,"George"仍将在stdin上等待另一个读取使用。

您可以通过将count与您试图读取的内容数量进行比较来检测故障,如果它太低,则以某种方式恢复,或者丢弃输入和错误。

相关文章: