CIN not refreshing?

  • 本文关键字:refreshing not CIN c++
  • 更新时间 :
  • 英文 :


首先,我知道问题标题不清楚,因此,让我解释一下我的问题。

我正在写一个cpp代码,我使用std::cin,它应该检查输入是不是数字,以及它是负数还是正数。

这是我的代码:

#include <windows.h>
#include <iostream>
using namespace std;
int main(void) {
SetConsoleTitle(" ");
while(true) {
int x;
if((cin >> x)) {
cin.ignore();
if(x > 0) {
cout << "Podmienka splnenan";
}else{
cout << "Podmienka nesplnenan";
}   
}else{
cin.ignore();
cout << "Neplatny vstupn";
}
}
}

我遇到的问题是,如果输入不是数字,cin似乎不接受任何新的输入,这很奇怪,发生的情况是,它将继续以前的输入,我希望我很清楚。

问题是您没有从流中清除故障位。这可以通过clear函数来完成。因此,正确的方法是:

else{

cout << "Neplatny vstupn";
cin.clear();//clear the error flag
cin.ignore();
}

替代解决方案

请注意,您也可以在不使用的情况下使用cin.ignorecin.ignore执行,如下所示。下面的示例将输入作为std::string,然后进行验证。


#include <iostream>
#include <string>
#include <sstream>
int main(void) {
std::string input;
int x;
while(std::getline(std::cin,input)) {
std::istringstream ss(input);
if((ss >> x)) {

if(x > 0) {
std::cout << "Podmienka splnenan";
}else{
std::cout << "Podmienka nesplnenan";
}   
}else{

std::cout << "Neplatny vstupn";

}
}
}

当输入失败时,cin进入失败状态(可由cin.fail()测试(。删除坏输入后,需要调用cin.clear()来重置状态。

最新更新