我试图从文件中读取文本,这就是我正在做的事情:
int main(int argc, char* argv[])
{
ifstream inFile;
inFile.open(argv[1]);
string item;
while(inFile.good())
{
inFile >> item;
cout << item << " " << endl;
}
由于某种原因,它会两次读取文件中的最后一个单词。我尝试使用count
变量来跟踪它进入while循环的次数,它总是输入的时间比文件中的总行数多一次。我认为这种情况正在发生,因为inFile.good()
语句不会很快返回false。怎么能修好呢?
答案 0 :(得分:3)
你没有测试
inFile >> item;
是否成功 - 在读取文件的最后一个单词时仍然有换行符或其他空格 - 所以你还没有到达文件结尾,但另一方面却没有还要读取更多的单词,因此最后一次读取失败,但您没有检测到它。
你可以测试>>
作为bool表达式的成功,这应该有用;
if (inFile >> item)
cout << item << " " << endl;
答案 1 :(得分:1)
最后一次读取失败,但你没有抓住它。变量只保留以前的值。
将您的循环更改为:
while(inFile >> item)
{
cout << item << " " << endl;
}
答案 2 :(得分:0)
其他人已经展示了您应该编写的代码,因此我只是要解释您的代码无法正常工作的原因。
确实, istream.good()
&#34;很快就没有返回假。&#34;读完文件中的最后一项后,它仍然是真的。只有当您尝试读取文件的结束之后,它才会变为错误。
全部提出问题的各种方式&#34;我到达文件的末尾了吗?&#34;在C和C ++中具有相同的语义。这是因为底层OS原语read
无法同时返回数据和信号EOF。