c++中,在while循环中到文件尾eof(),怎么就会输出空一行呢?

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ofstream fout("1.txt");
fout<<"你好\n";
fout.close();
ifstream fin("1.txt");
while (!fin.eof())
/*就是这个文件结束标志的问题,用他做条件,输出就会空一行,文件里也没用2个换行啊?换成这样
while (fin.get(ch))
chout<<ch; 就不会空一行。用文件结束标志做条件为什么会空一行呢?*/
{
char ch;
fin.get(ch);
cout<<ch;
}
fin.close();

return 0;
}

eof 就是文件结束
因为文件指针到最后一个字符时并不会触发eof,再读一次读不到数据才触发eof,这样c还保留着上一次的数据,又被输出一次,peek()方法是读取文件指针下一个位置的值,但并不移动文件指针,用在这里很合适

while (fin.peek()!=EOF)
温馨提示:内容为网友见解,仅供参考
无其他回答

c++中,在while循环中到文件尾eof(),怎么就会输出空一行呢?
eof 就是文件结束 因为文件指针到最后一个字符时并不会触发eof,再读一次读不到数据才触发eof,这样c还保留着上一次的数据,又被输出一次,peek()方法是读取文件指针下一个位置的值,但并不移动文件指针,用在这里很合适 while (fin.peek()!=EOF)

C++ 为什么while(! iofile.eof() )读取文件会出现死循环
eof() 函数本身,并不到输入流里去取数,不去读取文件。单用 while(!iofile.eof()); 由于没有别的读语句去读文件,而自身又不会去读取文件,只是不断地判断 iofile的 EOF 标志位状态,那就永远是 "没有读到EOF". 死循环。中国教科书 一脉相承,爱用 while(!fp.eof()) { 读,打印;}...

c++ eof()的一个典型问题
至于inf >> c为什么不会出错,可以这样理解:inf >> c在还没有到达文件末尾时,返回对象本身,即inf(非零值);当遇到EOF输入时,返回值为0,循环结束,不会多输出一个-1。

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

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

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

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

关于c++eof()函数,用while(!ifile.eof())时,遍历文件内容,但输出的时候...
i]<<' '<<qq[i]<<endl;}或者while(ifile>>bednum[i]>> name[i]>>address[i]>>qq[i] && !ifile.eof()){cout<<bednum[i]<<' '<<name[i]<<' '<<address[i]<<' '<<qq[i]<<endl;}循环遍历读到文件尾的时候,eof不会返回TRUE,只有当你下次读取完毕时,才会返回TRUE。

在C++中文件函数eof的作用是什么,以及用法
C++ eof()函数可以帮助我们用来判断文件是否为空,抑或是判断其是否读到文件结尾。在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放...

C++ 为什么while(! iofile.eof() )读取文件会出现死循环
iofile.seekp(i*sizeof(stu_obj),ios::beg);的时候指向文件尾了 后面的读取操作就会瓦掉。可以改为 while(!iofile.eof()){ iofile>>stu_obj.tag>>stu_obj.num>>stu_obj.name>>stu_obj.score;stu_obj.disp();i++;iofile.seekp(i*sizeof(stu_obj),ios::beg);\/\/针对输出文件的操作...

相似回答