我正在尝试做一个循环,检查输入是否是一个数字,如果没有再次询问
I am trying to make a loop that will check if input is a number and if not ask again
这是我迄今为止的代码。我尝试了一些像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;
这是因为std::cin
上的failbit
标志在设置时不会自动清除。这意味着!cin
将始终为真。您必须使用clear()
功能手动清除标志。
与其尝试读取一个整数,如果失败,则清除流的故障位,不如读取一个字符串,如果转换不成功,则重复此操作。
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 != ' ');
相关文章:
- 如果没有malloc,链表实现将失败
- 如果没有数学库,我如何在C++中创建复利公式
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 为什么使用 std::vector 的代码不能编译,但使用 std::unique_ptr 如果没有 noexcept
- 当一行中只有一个"#"而没有其他内容时,C++预处理器会做什么?
- 如果没有重新散列,为什么 unordered_set::begin() 会改变?
- 包装器是从 strcat_s() 到 strcat() 吗?如果没有,是否可以创建一个?
- 检查私有成员变量是否在一定范围内,如果没有调整
- 将参数从一个函数传递到另一个函数(没有模板) - C++
- 我是否应该在包含虚拟方法的类上使用'memcpy'?如果没有,如何替换它?
- 编译了一个recent-C++.因此,如果没有暴露std符号,请在旧系统上运行
- 如果没有数据,则创建一个包含数据的文本文件,然后读取它以检索数据
- 如果没有项目,如何在Visual Studio 2012中仅编译一个文件(C )
- 我正在尝试做一个循环,检查输入是否是一个数字,如果没有再次询问
- 如果只有一个成员没有默认构造函数,为什么联合有一个已删除的默认构造函数?
- 在C++中,如果没有dynamic_cast,我怎么能将一个子类实例从一个基类指针转换到另一个基类
- 检查输入的号码,如果没有找到号码,则默认为一个值
- 如何给一个变量的默认值,如果没有参数提供给构造函数?c++
- 是否有可能在C中使用系统api启动一个kill命令?如果没有其他选择的话