首页 >后端开发 >C++ >为什么我的 C 程序在输入非数字时会进入无限循环?

为什么我的 C 程序在输入非数字时会进入无限循环?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-10 10:18:11180浏览

Why Does My C   Program Enter an Infinite Loop with Non-Numeric Input?

为什么输入字母而不是数字时程序会无限循环?

尝试在 C 程序中输入正整数时但如果不小心输入了字母,可能会出现无限循环。此行为源于输入流 cin 处理字符的方式。

当输入不正确(例如,字母而不是数字)时,cin 流会设置失败位标志并将不正确的输入留在缓冲区中。后续尝试使用 cin 读取整数将继续返回不正确的输入,从而导致无限循环。

要解决此问题,通过检查错误并清除输入缓冲区来正确处理不正确的输入至关重要。下面是代码的修改版本,其中包括错误处理:

#include <iostream>
#include <limits>

int main()
{
    // Define variables
    int num1, num2, total;
    char answer1;

    do
    {
        // User enters a number
        cout << "\nPlease enter a positive number and press Enter: ";
        while (!(cin >> num1))
        {
            cout << "Incorrect input. Please try again." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        if (num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue." << endl;
    } while (num1 < 0);

    // Rest of the code goes here

    return 0;
}

在此更新的代码中, while (!(cin >> num1)) 循环一直运行,直到输入有效整数。当检测到不正确的输入时,会显示错误消息,并使用 cin.clear() 和 cin.ignore() 清除输入缓冲区。这确保了程序在处理错误后可以继续正确读取输入。

以上是为什么我的 C 程序在输入非数字时会进入无限循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn