C++问题:ifstream流一直找不到文件结束符 while循环一直没有跳出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++问题:ifstream流一直找不到文件结束符 while循环一直没有跳出相关的知识,希望对你有一定的参考价值。

#include <stdlib.h>

#include <fstream>

#include <iostream>

int main()


vector<int> files;

ifstream infile("messi.txt");
if(!infile)

cerr<<"cannot open the file:"
<<"ronaldo.txt"<<endl;

int tofile;
while(infile>>tofile,!infile.eof())//以行读入 getline(infile,tofile)//流
//状
if(infile.bad()) //态 //8.9和8.10
throw runtime_error("IO stream ocorrupt"); //的
if(infile.fail()) //查
//询
cerr<<"bad data,try again.."<<endl; //和
infile.clear(); // //控
//infile.ignore(numeric_limits<streamsize>::max(),'\n'); //制
continue;

if(!infile.fail())

files.push_back(tofile);


vector<int>::iterator ster=files.begin();
for(;ster!=files.end();ster++)

cout<<*ster<<endl;

infile.close();
infile.clear();
system("pause ");
return 0;

messi.txt文件内容如下:
data milan london 43 12 liverpool chelsea 32 enter
lionel 32 enter
12 980 enter
执行结果一直是输出bad data,try again..并且停不下来了 求高手解答。。。

当读到d(第一个字符)时,读取失败,输出bad data,try again.,然后你清除了错误标记,但是文件流指针并没有移动,因此读到的始终是d这个字符。你应该加个cin.get()之类的。追问

具体怎么做呢??求QQ详聊。。。

追答

//infile.ignore(numeric_limits::max(),'\n');

改为

infile.get();应该就可以了,相当于跳过当前字符。

参考技术A int tofile;

infile>>tofile

但是你的txt的开头是“data...”,字符串你当int读入,当然出错了。追问

这个我知道。。但是程序为什么找不到文件结束符?一直输出bad data,try again..并且停不下来了?

追答

orz,可能是卡在那里了。
你试试用char[]读入不就好了么,调试调试不就明白了

以上是关于C++问题:ifstream流一直找不到文件结束符 while循环一直没有跳出的主要内容,如果未能解决你的问题,请参考以下文章

C++中,ifstream和ofstream定义文件流的区别

C++的ofstream与ifstream使用

C++ ifstream ofstream 用法解析(iostreamfstream头文件)(ios::appios::ateios::inios::outios::trunc)(未完)

C++ ifstream ofstream 用法解析(iostreamfstream头文件)(ios::appios::ateios::inios::outios::trunc)(未完)

ofstream和ifstream详细用法

C++文件操作的简单程序