dha*_*0us 2 c++ file-io fstream file
下面的代码,当用g ++编译和运行时,打印'1'两次,而我希望'1'只打印一次,因为我将一个结构转储到文件中,但回读时它似乎是读取两个结构.为什么?
#include <iostream.h>
#include <fstream.h>
int main(){
struct student
{
int rollNo;
};
struct student stud1;
stud1.rollNo = 1;
ofstream fout;
fout.open("stu1.dat");
fout.write((char*)&stud1,sizeof(stud1));
fout.close();
ifstream filin("stu1.dat");
struct student tmpStu;
while(!filin.eof())
{
filin.read((char*)&tmpStu,sizeof(tmpStu));
cout << tmpStu.rollNo << endl;
}
filin.close();
}
Run Code Online (Sandbox Code Playgroud)
Ecl*_*pse 11
eof 只有在读取失败后才会设置,因此读取运行两次,第二次,它不会修改缓冲区.
试试这个:
while(filin.read((char*)&tmpStu,sizeof(tmpStu)))
{
cout << tmpStu.rollNo << endl;
}
Run Code Online (Sandbox Code Playgroud)
要么
while(!filin.read((char*)&tmpStu,sizeof(tmpStu)).eof())
{
cout << tmpStu.rollNo << endl;
}
Run Code Online (Sandbox Code Playgroud)
Read在调用时返回对filin的引用,如果流仍然良好,它将评估为true.当读取无法读取任何更多数据时,引用将评估为false,这将阻止它进入循环.
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |