VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1384|回复: 11

下边读取文件,为什么运行结果为1 2 3 4 5 6 7 7多了一个7

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-16 09:00:02 | 显示全部楼层 |阅读模式
#include <fstream.h>
void main()
{
ofstream fout("d:\\intdata.dat");

int a[7]={1,2,3,4,5,6,7};
for (int i=0;i<7;i++)
fout.write((char *)&a[i],4);
fout.close();


ifstream fin("d:\\intdata.dat");

int x;
do {
fin.read((char *)&x,4);
cout << x<< " ";
} while (!fin.eof());
fin.close();

}
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-17 00:30:01 | 显示全部楼层
do {
fin.read((char *)&x,4);
cout << x<< " ";
} while (!fin.eof());

你先读的后判断,若将while写在前面就不会多了
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-4-17 13:00:02 | 显示全部楼层
改正后,一样不能得到正确的结果亚。。。。。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-17 18:00:01 | 显示全部楼层
fin.read((char *)&x,4);//read one first, then

while (!fin.eof()){
cout << x<< " ";
fin.read((char *)&x,4);
}
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-18 08:45:01 | 显示全部楼层
while (fin.read((char *)&x,4) && !fin.eof()) {
        cout << x<< " ";
}
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-18 11:00:01 | 显示全部楼层
读完7个后,并不会导致eof()测试为“真”,当读第8个时eof()才为真,所以多了个7
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-18 15:15:01 | 显示全部楼层
或者换一下
while (!fin.eof()&&fin.read((char *)&x,4)) {
        cout << x<< " ";
}
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-20 22:00:01 | 显示全部楼层
你打开文件看一下,如果没错的话,你的文件是以空格结尾的,我也碰到过这个问题,按backspace,把那个空格去掉就好了.就是说文件最后不要为空格,应该为7.鼠标光标紧挨着7
回复

使用道具 举报

1

主题

39

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-22 22:30:01 | 显示全部楼层
int a[7]={1,2,3,4,5,6,7};
for (int i=0;i<7;i++)
fout.write((char *)&a[i],4);

这里面写入文件 1,2,3,4,5,6,7
那么读取的时候为 1,2,3,4,5,6,7 很正常.
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-6-2 11:45:01 | 显示全部楼层
请高人指点。。。。。还是不行,为什么会多读一次
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表