奋斗中的cc 2018-10-28 04:51 采纳率: 0%
浏览 998
已采纳

VS2017对二进制文件写入和读出是乱麻麻

代码:#include
#include
using namespace std;
struct student
{
int num;
char name[20];
float score;
};
int main()
{
student stud[5] = { 1001,"Li",85,1002,"Fan",97.5,1004,"Wang",54,1006,"Tan",76.5,1010,"Ling",96 };
fstream iofile("stud.dat", ios::in | ios::out | ios::binary);
if (!iofile)
{
cerr << "open error!" << endl;
abort();
}
for (int i = 0; i < 5; i++)
iofile.write((char*)&stud[i], sizeof(stud[i]));
student stud1[5];
for (int i = 0; i < 5; i = i + 2)
{
iofile.seekg(i * sizeof(stud[i]), ios::beg);
iofile.read((char*)&stud[i / 2], sizeof(stud1[0]));
cout << stud1[i / 2].num << " " << stud1[i / 2].name << " " << stud1[i / 2].score << endl;
}
cout << endl;
stud[2].num = 1012;
strcpy_s(stud[2].name, "Wu");
stud[2].score = 60;
iofile.seekg(2 * sizeof(stud[0]), ios::beg);
iofile.write((char*)&stud[2], sizeof(stud[2]));
iofile.seekg(0, ios::beg);
for (int i = 0; i < 5; i++)
{
iofile.read((char*)&stud[i], sizeof(stud1[i]));
cout << stud1[i].num << " " << stud1[i].name << " " << stud1[i].score << endl;
}
iofile.close();
return 0;
}

运行结果:图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-10-28 05:22
    关注
     // Q704572.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    #include<fstream> 
    #include<iostream>
    using namespace std;
    struct student
    {
    int num;
    char name[20];
    float score;
    };
    int main()
    {
    student stud[5] = { 1001,"Li",85,1002,"Fan",97.5,1004,"Wang",54,1006,"Tan",76.5,1010,"Ling",96 };
    fstream iofile("c:\\stud.dat", ios::in | ios::out | ios::binary);
    if (!iofile)
    {
    cerr << "open error!" << endl;
    abort();
    }
    for (int i = 0; i < 5; i++)
    iofile.write((char*)&stud[i], sizeof(student));
    student stud1[5];
    for (int i = 0; i < 5; i++)
    {
    iofile.seekg(i * sizeof(student), ios::beg);
    iofile.read((char*)&stud1[i], sizeof(student));
    cout << stud1[i].num << " " << stud1[i].name << " " << stud1[i].score << endl;
    }
    cout << endl;
    stud[2].num = 1012;
    strcpy_s(stud[2].name, "Wu");
    stud[2].score = 60;
    iofile.seekg(2 * sizeof(stud[0]), ios::beg);
    iofile.write((char*)&stud[2], sizeof(stud[2]));
    iofile.seekg(0, ios::beg);
    for (int i = 0; i < 5; i++)
    {
    iofile.read((char*)&stud[i], sizeof(stud1[i]));
    cout << stud1[i].num << " " << stud1[i].name << " " << stud1[i].score << endl;
    }
    iofile.close();
    return 0;
    }
    

    图片说明

    如果问题得到解决,请点我回答右边的采纳,谢谢


    补充下,后面的也不对,你
    stud[2].num = 1012;
    strcpy_s(stud[2].name, "Wu");
    stud[2].score = 60;
    iofile.seekg(2 * sizeof(stud[0]), ios::beg);
    iofile.write((char*)&stud[2], sizeof(stud[2]));
    更新的是stud
    但是最后循环输出的是stud1,所以更新了看不到变化。
    这个你自己修改下吧。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 4月3日

悬赏问题

  • ¥50 unitywebrequest分段下载导致报错,如何解决?
  • ¥15 错误使用 gretna_GUI_PreprocessInterface>RunBtn_Callback
  • ¥15 WPF如何用Chart绘画出Y轴的左边数据
  • ¥15 pycharm无法查看内置代码
  • ¥15 跑hls xfopencv的例程standalone_hls_axi_example出的错误,csim没问题,c synthesis出的错误
  • ¥15 sqlserver update语句逐行生效
  • ¥20 Windows10系统命令行调用
  • ¥15 php环境如何实现国密SM2相关功能
  • ¥15 关于#单片机#的问题:K210 例程里面提示我iomem.h: No such file or directory
  • ¥15 LSPI算法的大问题