C++文件读取问题!什么情况下会一直读入 -1 ,但是判断eof()却一直为0

文件格式就是上面这样,大概2千万行。
void skip(ifstream &in,char ch)
{
char temp;
temp=in.get();
if(in.eof())
return ;
do
{
temp=in.peek();
in.seekg(1,ios::cur);
}
while(temp!=ch&&!in.eof());
}

程序就此陷入死循环,一直读到-1,但是eof是0跳不出循环。。。
而且理论上程序应该还没有把文件读完。。。

不是你的文件有问题,问题肯定出在in.eof()的判断上,其实已经读到文件末尾了,所以peek()返回的是-1,但是eof没有返回应该返回的true。具体是什么原因,你要去查查eof()函数的使用方法。

你跟踪一下eof()返回的值,你会发现返回了一个很大的整数,而不是0或者-1,所以导致一直循环。


while(temp!=ch&&!in.eof());
改成while(temp!=ch && cin.peek() != EOF); 问题解决
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-06
同意hatemina的,或者peek改为read,eof就能正确返回值,如果需要读一行就getline
第2个回答  2012-07-06
代码贴出来 瞅瞅追问

来 你看看
程序是在服务器上跑的

第3个回答  2012-07-06
贴出文件的内容来看看

C++文件读取问题!什么情况下会一直读入 -1 ,但是判断eof()却一直为0
不是你的文件有问题,问题肯定出在in.eof()的判断上,其实已经读到文件末尾了,所以peek()返回的是-1,但是eof没有返回应该返回的true。具体是什么原因,你要去查查eof()函数的使用方法。你跟踪一下eof()返回的值,你会发现返回了一个很大的整数,而不是0或者-1,所以导致一直循环。把 while(temp...

C++ while ((a[i]=getchar())!=EOF) 为什么输入EOF没有循环中断?
EOF是系统定义的符号常量,值是-1。无论你怎么输入都不可能使a[i]为-1,因为用getchar只能接收一个字符,而-1没有对应的字符(-1不是ASCII码)。想要得到-1那就要制造一个错误,因为getchar在遇到错误时返回-1。同时压下Ctrl键和字母'z'键,就能制造一个错误。这宗代码似乎还有错误,a数组声明的...

c++,文件流,为什么有时候最后一行会重复输出,有时候又不会呢?
估计原因是:数据文件最后一个记录是否以回车换行结束。如果换行了,最后记录读取后,还要读取一次,结果什么都没有读到,只返回了eof,导致内容不可用。可以考虑这样处理:在读取每行记录之前,将姓名字符串数组首变量赋值为0,然后在读取后显示前判断姓名字符串是否为空,为空则跳过不显示。

C++文件读取和写入时出现问题了。
原因:你的程序读到的不是第1行内容,而是最后一行内容,因为会一直读到让eof()函数反回1为止,而eof反回1,则文件已到末尾了。而最后一行与倒数第二行之间可能根本就没有内容,也就是你程序中的变量c可能只读到了一个回车换行符,所以程序输不出东西。评论很多定符不能打,我插 定义二维数组来接...

c++中文件打开用了eof()后,为什么文件就再也打不开了啊??
eof()函数的设定是因为遇到文件尾了,EOF其实是-1值,当遇到文件末尾,则设置eof,并且返回eof()为true,然后对象不再读取文件,也就是输入流被截断 可以用fstream对象的clear来清除 你可以用iofile.clear();来重新设置

c++ eof()的一个典型问题
对于第一节的问题,可以这样解释:按照常规理解,如果到达文件末尾,eofbit应该被置为1,此时inf.eof()应返回真。但输入输出流在判断是否到达文件末尾时出现了问题:他们的依据是,只有当inf.get()无法读取数据时,才会判断到达了文件末尾,此时才会把eofbit置为1,此时inf.eof()才会返回真。问题就在这里...

C++问题 EOF
因为 a 和 b 都是整型 一直不能把 字符a 给读取掉, 所以a就一直在那里, 程序会一直卡在那,因为程序是从没被读掉的字符开始的,另外 你打上 EOF 是用于多组数据输入,处理多组数据时用得 会一直读到文件的结尾 或者输入 Ctrl+C时结束

c++eof()函数对文件及字符串的处理解析
在C\/C++编程中处理文件时,`eof()`函数的使用对于判断文件是否为空或是否到达文件结尾至关重要。然而,操作过程中可能会遇到问题,如无法准确判断文件状态,这可能导致程序运行结果不稳定。例如,多输出一个字符或陷入死循环。输出结果分析显示,`eof()`函数的返回值可能会误导程序员。该函数返回true时,...

C++ 为什么while(! iofile.eof() )读取文件会出现死循环
而自身又不会去读取文件,只是不断地判断 iofile的 EOF 标志位状态,那就永远是 "没有读到EOF". 死循环。中国教科书 一脉相承,爱用 while(!fp.eof()) { 读,打印;}; [读到了EOF,还重复输出最后一项]而不用 正确的: while(1){读; if (fp.eof()) break; 打印;};误人子弟哦。

C++中读取文本eof的一个问题
你这里用的是infile.good呀。不过按你的意思应该是即使用eof也会有错是吗?因为c++读文件的时候是这样的,他读到eof的时候才会变成eof,但是他不知道下一个字符是eof呀。所以你读到末尾了,下一个是结束字符eof,这个时候你判断的是当前的状态,确实是好的。然后你读了下去,其实读出的就是eof字符。

相似回答