假设我有一个
的文件100 text
如果我尝试使用ifstream读取2个数字,则会失败,因为text
不是数字。使用fscanf我会通过检查其返回码来知道它失败了:
if (2 != fscanf(f, "%d %d", &a, &b))
printf("failed");
但是当使用iostream而不是stdio时,我怎么知道它失败了?
答案 0 :(得分:12)
它实际上是(如果不是更多)简单:
ifstream ifs(filename);
int a, b;
if (!(ifs >> a >> b))
cerr << "failed";
顺便说一下,习惯这种格式。因为它非常适合非常(通过循环继续积极进展更加如此)。
答案 1 :(得分:3)
如果有人'使用GCC与-std=c++11
或-std=c++14
她可能会遇到:
error: cannot convert ‘std::istream {aka std::basic_istream<char>}’ to ‘bool’
<强>为什么吗
C ++ 11标准使bool
运算符调用显式(ref)。因此有必要使用:
std::ifstream ifs(filename);
int a, b;
if (!std::static_cast<bool>(ifs >> a >> b))
cerr << "failed";
我个人更喜欢下面使用fail
功能:
std::ifstream ifs(filename);
int a, b;
ifs >> a >> b
if (ifs.fail())
cerr << "failed";