我想在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();
}
问题:转换失败后,errno没有更新成功转换案例的错误值。对于之前未成功的电话,它的价值保持不变。
请告诉我如何处理这个问题?
答案 0 :(得分:5)
errno
的联合帮助页:
任何系统调用或库函数都不会将
errno
设置为零
但您可以将其设置为零,如strtol()
调用程序应在调用之前将
errno
设置为0,然后通过检查调用后errno
是否具有非零值来确定是否发生错误。
所以只需添加
errno = 0;
在致电strtol()