我正在使用getline在循环中读取我的程序的输入。
string temp(STR_SIZE, ' ');
string str_num(STR_SIZE, ' ');
...
getline(cin, temp, '\n');
之后,我使用函数查找下一个分隔符(空格)并将空格前的所有字符分配给str_num。看起来像这样:
str_num.assign(temp, 0, next_white_space(0));
我已经证实这很有效。我的解决方案的下一步是将str_num转换为int(这部分也很好),但我应该检查以确保str_num中的每个字符都是一个数字。这是我尝试过的最好的东西:
if(!isdigit(str_num[0] - '0')) {
cout << "Error: Not an appropriate value\n";
break; /* Leave control structure */
}
由于某种原因,它始终打印错误消息并退出结构。 这是为什么? 我之前使用了operator []作为字符串对象,它似乎运行良好。但是,在这里,它完全搞砸了我。
感谢。
答案 0 :(得分:7)
std::isdigit
获取char的整数值并检查它。
因此,删除 - '0'并将str_num [index]传递给isdigit()。
注意:因为这个函数来自C,所以将字符作为整数处理的旧样式在采用int的方法中显示出来。但是,字符可以提升为int值,因此char变为int就好了,这就可以了。