为什么不能在这种状态下执行'ifstream'

时间:2014-04-28 10:40:53

标签: c++

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    int a;
    char b;
    ifstream in("a.txt");

    if (!(in >> a))
        in >> b;
    if (!(in >> a))
        in >> b;
    in >> b;
    in >> b;

    cout << a;
    cout << b;
}//source code

5 a b c d e
//a.txt
  1. 如果文件中有int,我想将其读作int和
  2. 如果文件中有一个字符,我想把它读作char。
  3. 为什么无法阅读&#39; char b&#39;在尝试将b读作int?
  4. 之后

2 个答案:

答案 0 :(得分:4)

int读取失败后,设置了流的failbit。这会导致所有后续读取尝试失败。在尝试后续读取之前,可能会clear()错误。

请注意,operator>>(int&)会跳过前导空格。如果某个空格是您应用程序中的有效字符,则失败的int读取将产生不良副作用。如果文件是面向行的,那么另一种方法是使用std::getline()stoi()来处理数据。

答案 1 :(得分:0)

你试图两次读入(这是一个int)。你应该在a中阅读一次,然后只在b中阅读。 但是,我建议你使用更通用的方法,逐行阅读。