下面是我用来检查key是否是一个数字的代码:
string key;
cin>>key;
if(isalpha(atoi(key.c_str())) == 0)
{
//do something
}
else
//do something else无论我输入什么,isalpha总是== 0。我试着用if(isalpha(atoi(key.c_str())))把它当做布尔值来处理,但是它做了同样的事情。
密钥应该是int,但cin.fail()和!(cin>>key)也不起作用。
发布于 2013-03-03 07:51:48
在您的代码中,key是一个C++字符串。
string key;这会将C++字符串转换为C字符串。
key.c_str()这会将C字符串转换为数字。一个整数。(如果值无法转换,则为0)
atoi(key.c_str())这将检查该数字是否为字母的ASCII代码
isalpha(atoi(key.c_str()))将C++字符串转换为C字符串、整数转换为ASCII值,然后检查该值是否为字母表中的字母(这不会告诉您它是数字,而是“字母”或“不是字母”)
只有当用户输入的不是字母的ASCII值时,您编写的if语句才为真。例如,输入65将转到else子句,因为65是'A'的ASCII码
试试@chris kindly提供的建议。
try
{
int the_number = std::stoi(key);
//do something
}
catch( std::exception& )
{
//do something else
}发布于 2013-03-03 07:40:20
您正在定义没有内容的键,并且在它返回指向空数组的字符指针的情况下立即使用它的t_str方法。因此,atoi总是返回零。
请参考此处的http://www.cplusplus.com/reference/cstdlib/atoi/
在给定的示例中,键为空,atoi参数无效,因此atoi始终返回零
发布于 2013-03-03 07:58:09
如果需要测试输入是否为数字,请执行以下操作:
string key;
cin>>key;
if (key.size() && isalpha(*(key.c_str()))
{
//do something with non-numeric input
}
else
// numeric input, use atoi to get integer valuehttps://stackoverflow.com/questions/15180713
复制相似问题