C++ isalnum 无限循环

标签 c++ isnumeric

您好!

这次让我们减少过多的介绍,直奔主题。

我在 C++ 中使用 isalnum 方法时遇到问题。

代码:

int playAgainst = 0;
do
{
    cout << "Who do you want to play against?(1/2)\n";
    cout << "1: Human player\n";
    cout << "2: Computer player\n";
    cin >> playAgainst
} while(!isalnum(playAgainst) && playAgainst != 0);

如代码所示,我为用户提供了一个选择。与人对战或与电脑对战。

我想要的是,只要用户输入任何其他内容然后输入一个整数值(cin >> playAgainst)来重复问题。但是,如果我输入一个字符或字符串值,它会无限循环。我不是 100% 确定,但很明显,如果问题是非 int 值已经保存为 playAgainst 的值。如果输入值是 int,我如何在保存之前检查这段代码它?

或者是保存为字符/字符串然后检查的唯一可能性吗?

如果是后者,新的问题又出现了。 isalnum 只接受 int 作为参数,至少据我所知。我将如何检查该字符串或字符是否为 int?

感谢您花时间阅读。希望我会尽快接受回复 ^^

谢谢大家的回答。 我得到了我想要的,一切都解决了。

我选择接受答案的原因是……因为最初,它让我的代码按照我想要的方式工作。不过我想接受多个答案..

最佳答案

playAgainst 设为 char 并与 '0' 进行比较,而不是 0。现在,用户必须输入字符 '1''2' 的 ASCII(或任何字符集)代码。

isalnumchar 有效范围之外的 int 无效,EOF 除外。 (它采用 int 参数的事实是 C 的遗留问题,它具有与 C++ 不同的整数提升规则。 以适应 EOF。 )

关于C++ isalnum 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485585/

相关文章:

PHP 手册 : Number Conversion in Is_Numeric Example 1?

c++ - 什么是 C++ 03 宏?

excel - 使用 IsNumeric 删除数据行

javascript - 同时使用 2 个函数来验证表单

c++ - free() :invalid size, 但没有调用 new() 或 free() - 使用 C++ 的 SQLite3

sql-server - 如果不是数字或 SQL 中的实际数值,则获取 null

vba - 如果第一个单元格不是数字vba Excel则删除行

c++ - 在 SYCL 中使用屏障

c++ - ID3DX10Mesh::克隆网格

c++ - 析构函数和解除分配的函数有什么区别?