从以不同方式格式化的文件数据中读取。 C ++

时间:2012-04-22 17:18:54

标签: c++ input io file-io formatted-input

我有一个文本文件,用于存储一些数据。有几个数据块以不同的方式格式化,所以我需要我的程序能够判断一个块何时结束而另一个块何时开始。这是一个非常简单的例子。

文字档案:

a 1
b 2
c 3

qwerty
asdfgh
xcvbnm

我的节目:

int x;
char a;
string line;

while(ifs >> a >> x)
    cout << a << " " << x << "\n";

cout<<"\n" << "next block of data" << "\n";

while(ifs >> line)
    cout << line;

然而它不读下半场。我认为用&gt;&gt;格式化阅读只是丢弃空格,所以我认为在第一个while()失败后,第二个while()应该开始读取后半部分。这是我的输出:

a 1
b 2
c 3

next block of data

另外,如果有人可以推荐一些有关此事的内容,我将非常感激。我搜索了几本书和互联网,找不到任何关于如何&gt;&gt;的清晰手册操作员工作。

1 个答案:

答案 0 :(得分:1)

operator>>失败时,失败位被设置,并且所有后续提取也将失败,除非您清除错误标志。使用ios::clear()

while(ifs >> a >> x)
    cout << a << " " << x << "\n";

ifs.clear();

您可以使用ios::bad()ios::fail()ios::eof()来确定提取失败的原因,以便您采取相应的行动。