如果输入非整数,如何防止无限循环?

时间:2016-01-03 11:25:29

标签: c++ input turbo-c++

我正在用C ++ turbo编写一个赌场游戏(Windows的最新版本)。 因此,在该程序的一个特定片段中,用户需要输入严格在0美元到100000美元之间的初始金额。

我使用嵌入式if语句创建了一个do-while循环:

do{
    cout << "\n\nEnter a deposit amount (between $0 and $100000) to play game : $";
    cin >> amount;
    if(amount<=0||amount>=100000)
        cout<<"Please re-enter your amount";
}while(amount<=0||amount>=100000);

当用户(即我)输入字符或小数时出现问题;程序然后失去控制,它会无限循环。

问题:如果输入除整数以外的其他内容,如何使用if语句来请求用户重新输入金额?随后,我怎样才能阻止程序失控?

3 个答案:

答案 0 :(得分:3)

问题在于,当您调用cin >> amount并且输入不是数字时,数据将保留在缓冲区中。一旦你的代码循环回到相同的操作,你的读取就会在无限循环中再次失败。

要解决此问题,您需要检查cin >> amount的结果,如下所示:

if (cin >> amount) {
    ... // do something with amount
} else {
    cin.clear(); // unset failbit
    // Ignore some input before continuing
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

ignore函数的引用是here

答案 1 :(得分:2)

您必须清除错误标志并忽略字符。

有关cin.clear()的示例,请参阅here

do {
    cout << "Enter a deposit amount (between $0 and $100000) to play game : $";
    cin >> amount;

    if(amount<=0 || amount>=100000) {
        cout << "\nPlease re-enter your amount\n";
        cin.clear();
        cin.ignore(10000,'\n');
    }
} while(amount<=0 || amount>=100000);

答案 2 :(得分:1)

试试这个

    if(amount<=0||amount>=100000)
    {
        cout<<"Please re-enter your amount";
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }