如果输入非整数,如何防止无限循环? 我在C++的Turbo上写了一个赌场游戏(最新版本的Windows)。 因此,在程序的一个特定片段中,用户需要输入一个严格介于0美元和100000美元之间的初始金额

如果输入非整数,如何防止无限循环? 我在C++的Turbo上写了一个赌场游戏(最新版本的Windows)。 因此,在程序的一个特定片段中,用户需要输入一个严格介于0美元和100000美元之间的初始金额,c++,input,turbo-c++,C++,Input,Turbo C++,我使用嵌入的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&l

我使用嵌入的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);
do{
数量;
如果(金额=100000)

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

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

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');
}
if(cin>>金额){
…//量力而行
}否则{
cin.clear();//取消设置故障位
//在继续之前忽略一些输入
cin.ignore(std::numeric_limits::max(),'\n');
}

ignore
函数的引用是。

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

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

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');
}
if(cin>>金额){
…//量力而行
}否则{
cin.clear();//取消设置故障位
//在继续之前忽略一些输入
cin.ignore(std::numeric_limits::max(),'\n');
}

忽略
功能的参考是。

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

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

do{
数量;
如果(金额=100000){

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

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

do{
数量;
如果(金额=100000){
试试这个

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

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


CUTI不懂其他答案!你特别不懂什么?关键点是调用<代码>()(代码)>并消耗非数字输入。因此,在我的例子中,我如何消耗非数字输入?没有什么类似的。Turbo C++中的失败……所以我不知道这意味着什么…@πῥεῖTurbo C++是一个古老的编译器,我知道,问题是我的学校需要我用这个蹩脚的编译器来完成我的项目:(@π-Youth-To-α)ῥεῖ我不明白另一个答案!你特别不了解什么?关键点是调用<代码>()(代码)>并且消耗非数字输入。所以在我的例子中,我如何消耗非数字输入?没有什么类似的。Turbo C++中的失败……所以我不知道这意味着什么…@π-π-ῥεῖTurbo C++是一个古老的编译器,我知道,问题是我的学校需要我用这个蹩脚的编译器来完成我的项目:(@π-Youth-To-α)ῥεῖ太棒了。+1我的朋友…我没有cin.ignore部分…为什么有10000?Nvm…我知道了。但是谢谢你!注意:我认为
10000
只是一个坏习惯。最好做
std::numeric\u limits::max()
是的,我知道,,,但没关系。太棒了。+1我的朋友…我没有cin。忽略部分…为什么有10000?Nvm…我知道。但是谢谢!注意:我认为
10000
只是一个坏习惯。可能最好做
std::numeric\u limits::max()
是的,我知道,,,但没关系。