C++ 我试图做一个循环,检查输入是否是一个数字,如果不是,再次询问
这是我到目前为止的代码。我尝试了一些东西,比如isDigit(nPlay)和!cin。也许我需要一个不同的循环。当我做任何一个的时候,如果我输入了一个大于4的数字,它的行为就像它是假定的一样。但当我输入一个字母或单词时,它就会进入一个无限循环C++ 我试图做一个循环,检查输入是否是一个数字,如果不是,再次询问,c++,loops,error-handling,C++,Loops,Error Handling,这是我到目前为止的代码。我尝试了一些东西,比如isDigit(nPlay)和!cin。也许我需要一个不同的循环。当我做任何一个的时候,如果我输入了一个大于4的数字,它的行为就像它是假定的一样。但当我输入一个字母或单词时,它就会进入一个无限循环 int view::numPlayer() { int nPlay = 0; while( nPlay == 0 ) { cout << "How many players will there be?" << endl;
int view::numPlayer() {
int nPlay = 0;
while( nPlay == 0 ) {
cout << "How many players will there be?" << endl;
cin >> nPlay;
if(nPlay > 4 || nPlay < 2 || !cin) {
nPlay = 0;
}
system("CLS");
}
return nPlay;
int视图::numlayer(){
int nPlay=0;
而(nPlay==0){
不能播放;
如果(nPlay>4 | | nPlay<2 | |!cin){
nPlay=0;
}
系统(“CLS”);
}
返回nPlay;
这是因为std::cin
上的failbit
标志在设置时不会自动清除。这意味着!cin
将始终为真。您必须使用该功能手动清除该标志。这是因为std::cin
上的failbit
标志在设置时不会自动清除。我ans!cin
将始终为真。您必须使用函数手动清除标志。而不是尝试读取整数,然后清除流的failbit如果失败,我将读取一个字符串,如果转换未成功,则重复该操作
int value;
char *pos;
std::string temp;
cout << "How many players will there be?";
do {
std::getline(cin, temp);
nPlay = strtol(temp.c_str(), &pos, 10);
} while (*pos != '\0');
int值;
char*pos;
std::字符串温度;
cout而不是尝试读取一个整数,然后清除流的failbit如果失败,我将读取一个字符串,如果转换没有成功,则重复
int value;
char *pos;
std::string temp;
cout << "How many players will there be?";
do {
std::getline(cin, temp);
nPlay = strtol(temp.c_str(), &pos, 10);
} while (*pos != '\0');
int值;
char*pos;
std::字符串温度;
cout您为'clear()'提供的链接也有一个很好的示例供OP阅读数字。很好。您为'clear()'提供的链接也有一个很好的示例供OP阅读数字。很好。