簡體   English   中英

std :: cin導致無限循環

[英]std::cin resulting in infinite loop

為什么以下代碼在輸入字符或字符串時會導致無限循環? 我已經看到了有關此問題的信息,以及答案中提供的解決方案( 此處為示例),但它似乎根本沒有幫助。 該代碼實現了此處建議的解決方案,但仍會導致無限循環。

#include <iostream>
#include <bitset>
#include <limits>
using namespace std;

int main() {
  int n;
  while (!(cin >> n)) {
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.clear();
    cout << std::bitset<8>(cin.rdstate()) << endl;
    cin >> n;
    cout << std::bitset<8>(cin.rdstate()) << endl;
  }
  cout << n;
  return 0;
}

g++ --version產生以下效果: g++ (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005

該程序的輸出如下:

00000000
00000100
00000000
00000100
... and so on 

盡管已清除流並且忽略了所有輸入,但似乎重新輸入了該值。

您可以在clear之前調用ignore ,但是只有在流沒有錯誤但流始終有錯誤的情況下, ignore才有效。
當您同時切換兩個語句時,它可以正常工作:在一個或多個無效輸入之后,需要2個連續的有效輸入才能成功終止程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM