检查输入类型失败,C++

Checking for input type fails, C++

本文关键字:C++ 失败 类型 输入 检查      更新时间:2023-10-16

我有这样的代码,它应该可以防止用户输入整数以外的其他东西来欺骗程序。我根据网上的几个来源写了这段代码,但由于某种原因,它不起作用。

                int cost;                    
                cin >> cost;
                if (!(cin>>cost)) {
                    cout << "Enter a number: ";
                    cin >> cost;
                    cin.ignore(10000, 'n');
                }

当您输入错误的类型时,本应显示的提示没有出现,程序终止。我尝试过四处移动并将cin.ignore()添加到其他地方,我也尝试过if(cin.fail()),但没有成功。

执行以下操作:

    int cost;
    cout << "Enter a number: ";                
    if(!(cin >> cost) {
      cin.clear();
      cin.ignore(10000, 'n');
    }

原因:您有一个多余的cin语句。

你可能会喜欢上面提到的@MatsPetersson和@40two,但我会这样做:

const int MAX_TRIES = 3;
int cost;
cout << "Enter a number: ";
for( int tries = 0; !(cin >> cost) && (tries < MAX_TRIES); ++tries ) {
  cin.clear();
  cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
  cout << "This is not a number, try again: ";
}

应该这样工作

int cost; 
while (!(cin >> cost) 
{  
  cout << "Enter a number:";  
  cin.ignore(10000, 'n');   
}