这段代码使用 cin 读取输入,当输入为非法时,cin.fail() 会返回 true,程序会输出错误信息并默认将 b[i] 设置为 0,然后继续执行下一次循环。

然而,当输入为 'q' 时,cin 会尝试将其转换为 int 类型,但 'q' 不能被转换为 int,导致 cin.fail() 返回 true。程序会输出错误信息,但输入缓冲区中仍然包含 'q',导致下一次循环时,cin 仍然会尝试将 'q' 转换为 int,而不会等待新的输入,从而陷入循环。

为了解决这个问题,可以在接收输入之前,先使用 cin.ignore() 来清除输入缓冲区中的内容。修改后的代码如下所示:

for (int i = 0; i < n; i++) {
    cin.ignore(); // 清除输入缓冲区中的内容
    cin >> b[i];
    if (cin.fail()) {
        cout << "非法输入!" << endl;
        cout << "默认当前变量为 0" << endl;
        b[i] = 0;
        continue;
    }
}

通过使用 cin.ignore() 清除输入缓冲区,可以确保每次循环都读取新的输入,避免陷入循环陷阱。

C++ 输入验证:如何处理非数字输入并避免循环陷阱

原文地址: https://www.cveoy.top/t/topic/qrOq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录