/* Checks if the inventory is valid. Criteria: Valid if and only if it contains only digits
*/
bool isValidInventory(string token) {
char ch; // Will be used to store characters of a token so that they can be checked individually.
for (int i = 0; i < token.length(); i++) {
ch = token[i];
if (isdigit(ch)) {
return true;
} else {
return false;
}
}
} // End of isValidInventory() function.
这个函数从本质上接受一个从字符串中提取出来的令牌,并验证它是否是整数。但是,我遇到了一个数字11.
的问题,我没有得到我想要的结果,这是一个消息,说库存是无效的,因为11.
不仅仅是数字。
我试过
if (isdigit(ch) && !ispunct(ch)) {}
但这不起作用,显然mod在这里也不起作用,因为11.0%1 = 0。
3条答案
按热度按时间ahy6op9u1#
在循环的第一次迭代时返回true或false。
您的代码甚至不可能查看字符串的第二个字符。
lp0sw83n2#
您的函数存在3个问题:
isdigit()
返回什么,它总是return
在第一次迭代时的一个值,所以,你没有检查整个token
。token
为空,则函数表现出 * 未定义行为 *,因为它根本不对任何值执行return
操作。char
传递给isdigit()
之前,需要将其强制转换为unsigned char
。试试这个:
68bkxrlz3#
如果字符串
token
是11
、110
或2
之类的数字,则此操作应该有效。在这种情况下,数字的格式类似于
11.00
。您可能需要检查此.
特定字符。