3

我正在尝试读取 上的几个数字stdin,每行一个数字。如果任何行上有任何数字和字符串,我想忽略任何尾随文本。为了实现这一点,我使用了以下代码:

while (getline(cin, str)) {
    num = strtol(str.c_str(), NULL, 0);

    if (errno != ERANGE && errno != EINVAL) {
        arr[i++] = num;
        req_pages_size++;
        cout << arr[i-1] << "\t";
    }

    str.clear();
}

ISSUE: 转换不成功后,errno 不会更新为成功转换情况的错误值。对于以前不成功的调用,它的值保持不变。

请让我知道如何处理这个问题?

4

1 回答 1

6

状态的联机帮助页errno

errno绝不会被任何系统调用或库函数设置为零

但您可以按照手册页中的说明将其设置为零strtol()

调用程序在调用前应设置errno为0,然后通过检查errno调用后是否有非零值来判断是否出错。

所以只需添加

errno = 0;

打电话之前strtol()

于 2013-03-11T20:08:17.407 回答