首先,我知道问题标题不清楚,因此,让我解释一下我的问题。
我正在写一个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.ignore
、cin.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()
来重置状态。