Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我试图做一个循环,检查输入是否是一个数字,如果不是,再次询问_C++_Loops_Error Handling - Fatal编程技术网

C++ 我试图做一个循环,检查输入是否是一个数字,如果不是,再次询问

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;

这是我到目前为止的代码。我尝试了一些东西,比如isDigit(nPlay)和!cin。也许我需要一个不同的循环。当我做任何一个的时候,如果我输入了一个大于4的数字,它的行为就像它是假定的一样。但当我输入一个字母或单词时,它就会进入一个无限循环

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阅读数字。很好。