我有一个文本文件,用于存储一些数据。有几个数据块以不同的方式格式化,所以我需要我的程序能够判断一个块何时结束而另一个块何时开始。这是一个非常简单的例子。
文字档案:
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;的清晰手册操作员工作。
答案 0 :(得分:1)
当operator>>
失败时,失败位被设置,并且所有后续提取也将失败,除非您清除错误标志。使用ios::clear()
while(ifs >> a >> x)
cout << a << " " << x << "\n";
ifs.clear();
您可以使用ios::bad()
,ios::fail()
和ios::eof()
来确定提取失败的原因,以便您采取相应的行动。