在终止while循环后无法控制

时间:2014-02-16 22:43:45

标签: c++ loops while-loop infinite-loop

int n;
while(cin>>n)
    cout << n; // Run by the program if received an int value
cout << "Break from loop"; // Run by the program
cin >> n; // Skipped by the program
cout << n; // Run by the program

在使用字符终止while循环后,无法接受另一个输入。

如果使用非整数/浮点值终止循环内的输入,如何接受另一个输入。

3 个答案:

答案 0 :(得分:0)

int n;
while(cin>>n) // Keep asking for value to input
    cout<<n<<"\n"; // This loop will never terminate for any Supplied val
//Above loop will terminate only when no more valued is supplied to code
// Hence once, we stopped entering the value, code will execute next line
// And end without asking for anymore value.
 cout<<"Break From Loop \n";

答案 1 :(得分:0)

假设您的问题是“如何在设置流状态后恢复输入?”然后有一个简单的解释:

执行提取的while循环仅在提取失败之前终止;这还包括当流到达输入流(EOF)的末尾时。当发生这种情况时,eofbit将被设置为蒸汽状态(以及故障位)。设置流状态时,流不能用于I / O.要再次使用它,必须清除流状态。这是使用成员函数clear(std::ios_base::iostate err = std::ios_base::goodbit)完成的。

std::cin.clear();

该调用将清除流状态中的位并将它们分配给0std::ios_base::goodbit)。在此调用之后,流可以再次用于I / O.

这假设流读取所有字符,直到达到EOF。对于在获取无效数据时终止的先前读取,这是不够的。还需要ignore()剩余的字符。

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

答案 2 :(得分:0)

如果您没有通过返回文件结尾(即Ctrl-D)或终止程序(即Ctrl-C)来终止程序。

也就是说,如果您通过不正确的数据类型退出循环,例如输入字母d而不是整数,则可以使用whilecin.clear()循环和{ {1}},其中getline(cin, str)是您提前声明的str

在此之后,您应该能够接受第二个string的输入。

所以,

cin