2014-02-16 51 views
2
 while(cout << "How many elements do you want: " && !(cin >> el)) 
     { 
      cin.sync(); 
      cin.clear(); 
      cout << " Invalid input!\n"; 
     } 

el是一个int,当我输入一个字符时,循环变得无限。 我跟着其中一个帖子来修复错误的输入,但它不工作,它进行无限循环打印“你想要多少个元素:无效的输入!” 我试图忽略(10000,“\ n”)以及但仍然不能正常工作...cin.sync和清除不工作?

回答

2

当从流中读取时发生错误,错误标志被设置,并且直到您清除错误标志。

这就是为什么你会得到一个无限循环。

而是使用:

cin.clear(); // clears the error flags 
// this line discards all the input waiting in the stream 
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
-1

cin.sync()之前执行cin.clear()。这个对我有用。