⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 例13.16.txt

📁 是关于谭浩强老师的C++程序设计课程的程序源代码以及课件
💻 TXT
字号:
例13.16 有5个学生的数据,要求: 
(1) 把它们存到磁盘文件中;
(2) 将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;
(3) 将第3个学生的数据修改后存回磁盘文件中的原有位置。
(4) 从磁盘文件读入修改后的5个学生的数据并显示出来。
#include <fstream>
using namespace std;
struct student
{int num;
 char name[20];
 float score;
};
int main( )
{student stud[5]={1001,″Li″,85,1002,″Fun″,97.5,1004,″Wang″,54,
                  1006,″Tan″,76.5,1010,″ling″,96};
 fstream iofile(″stud.dat″,ios::in|ios::out|ios::binary);  
//用fstream类定义输入输出二进制文件流对象iofile
 if(!iofile)
  {cerr<<″open error!″<<endl;
   abort( );
  }
 for(int i=0;i<5;i++)//向磁盘文件输出5个学生的数据
   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);  //定位于第0,2,4学生数据开头
    iofile.read((char *)&stud1[i/2],sizeof(stud1[0])); 
//先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
    cout<<stud1[i/2].num<<″ ″<<stud1[i/2].name<<″ ″<<stud1[i/2].score<<endl;
//输出stud1[0],stud[1]和stud[2]各成员的值
   }
 cout<<endl;
 stud[2].num=1012;                         //修改第3个学生(序号为2)的数据
 strcpy(stud[2].name,″Wu″);
 stud[2].score=60;
 iofile.seekp(2*sizeof(stud[0]),ios::beg);   //定位于第3个学生数据的开头
 iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
 iofile.seekg(0,ios::beg);                       //重新定位于文件开头
 for(int i=0;i<5;i++)
   {iofile.read((char *)&stud[i],sizeof(stud[i]));  //读入5个学生的数据
    cout<<stud[i].num<<″ ″<<stud[i].name<<″ ″<<stud[i].score<<endl;
   }
 iofile.close( );
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -