0

我正在使用 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[] 来处理字符串对象,它似乎工作得很好。但是,在这里,它完全把我搞砸了。

谢谢。

4

1 回答 1

7

std::isdigit接受一个 char 的整数值并检查它。

因此,删除 - '0' 并将 str_num[index] 传递给 isdigit()。

注意:因为这个函数来自 C,所以将 chars 视为整数的旧风格体现在采用 int 的方法中。但是,chars 可以提升为 int 值,因此 char 变成 int 就好了,这很有效。

于 2012-09-13T04:44:42.757 回答