| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2166 人关注过本帖
标题:读取文件后数据丢失
只看楼主 加入收藏
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
结帖率:100%
收藏
已结贴  问题点数:12 回复次数:6 
读取文件后数据丢失

程序代码:
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
    fstream file("E:\\MyCppSource\\习题13-4\\Debug\\f1.dat", ios::in | ios::out);
    int num[5],i;
    if (!file) exit(1);
    for (i = 0; i < 5; i++)
    {
        cin >> num[i];//从键盘得到整数
        file << num[i] << ' ';//将他输出到f1.dat文件
        file >> num[i];//从f1.dat文件读入整数
        cout << num[i] << ' ';//将他们输出到显示器
    }
    return 0;
}

假如我输入1 3 5 7 9输出到f1.dat文件,在读取出来输出就这样了:0 3 5 7 9,谁能解释一下吗,是什么问题?小白求教
运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: file 文件 读取 num 输出 
2020-05-10 21:15
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:8 
写入后flush一下,再读
程序代码:
        cin >> num[i];//从键盘得到整数
        file << num[i] << ' ';//将他输出到f1.dat文件
        file.flush();
        file >> num[i];//从f1.dat文件读入整数
        cout << num[i] << ' ';//将他们输出到显示器
2020-05-11 13:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
回复 楼主 ke_liu
最好不这么做,
理论上读写之间有 seek、flush、sync 等之一就行了,实际上还是有各种不兼容

程序代码:
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    fstream file( "f1.dat", ios::in|ios::out );
    if( !file )
    {
        cerr << "打开文件失败\n";
        return 1;
    }

    for( size_t i=0; i!=5; ++i )
    {
        int value;
        if( !(cin>>value) )
        {
            cerr << "键盘输入失败\n";
            return 2;
        }

        streampos pos1 = file.tellp();
        if( !(file<<value<<' ') )
        {
            cerr << "写入文件失败\n";
            return 3;
        }
        streampos pos2 = file.tellp();

        file.seekg( pos1 );
        if( !(file>>value) )
        {
            cerr << "读取文件失败\n";
            return 4;
        }
        file.seekp( pos2 );

        cout << value << ' ';
    }
    return 0;
}

2020-05-11 15:24
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
收藏
得分:0 
回复 2楼 fulltimelink
flush函数的作用我不明白,搜了下看不懂,我想问下我的这个代码是如何运行的,为什么前面的数字就莫名其妙没有了呢?
2020-05-11 18:52
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
收藏
得分:0 
回复 3楼 rjsp
你说的那些函数我都不知道,我想知道我的那个代码为什么就不能得到想要的结果,它是如何运行的?
2020-05-11 18:58
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:0 
这个看编译器的,你可以debug下
图片附件: 游客没有浏览图片的权限,请 登录注册

在Clion下可能就不会出现
图片附件: 游客没有浏览图片的权限,请 登录注册

不知道你有没有留意,文件最终只写入了1,而并不是9
2020-05-12 09:31
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
收藏
得分:0 
回复 6楼 fulltimelink
好的,谢谢!
2020-05-13 10:14
快速回复:读取文件后数据丢失
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020297 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved