C++11 cin>&燃气轮机;整数和while循环

C++11 cin>&燃气轮机;整数和while循环,c++11,while-loop,cin,C++11,While Loop,Cin,用下面的代码 如果我输入一个字母或一个很长的数字,while循环就会失控,这是为什么 void main() { int n{ 0 }; while (true) { cout << "Enter a number: "; cin >> n; cout << n << endl; } } void main() { int n{0}; while(true) { c

用下面的代码

如果我输入一个字母或一个很长的数字,while循环就会失控,这是为什么

void main()
{
    int n{ 0 };

    while (true)
    {
        cout << "Enter a number: ";
        cin >> n;
        cout << n << endl;
    }
}
void main()
{
int n{0};
while(true)
{
cout>n;

cout好吧,这并不能回答为什么,但它确实停止了混乱:系统(“暂停”)

void main()
{
int n{0};
while(true)
{
cout>n;

cout问题在于
操作符>>
希望从输入流中提取一个整数,但是还有其他东西(用户键入的非整数)。这将在输入流上设置错误状态。在这种状态下,
cin>>…
构造不再阻止输入,因为流中已经有内容(不是整数),因此您会看到循环失控

需要做的是,当输入不正确的输入时,必须检测到错误状态,必须刷新输入流,并且必须清除错误状态。此时,可以输入新的(希望是正确的)输入

请参见下面的示例:

#include <iostream>
#include <limits>

using namespace std;

int main () {
  int x = 0;
  while(true) {
    cout << "Enter a number: ";
    if( ! (cin >> x) ) {
      cin.clear();
      cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      cerr << "Invalid input. Try again.\n";
    }
    else {
      cout << "\t..." << x << "...\n";
    }
  }
  return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int x=0;
while(true){
cout>x){
cin.clear();
cin.ignore(std::numeric_limits::max(),'\n');

cerr在这段代码中,它看起来更“可读”,而不是使用
int n=0;
#include <iostream>
#include <limits>

using namespace std;

int main () {
  int x = 0;
  while(true) {
    cout << "Enter a number: ";
    if( ! (cin >> x) ) {
      cin.clear();
      cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      cerr << "Invalid input. Try again.\n";
    }
    else {
      cout << "\t..." << x << "...\n";
    }
  }
  return 0;
}