具体代码如下所示(也是网上拿过来用的)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define SIZE 4
struct student
{char num[20];
char name[10];
int time1;
}std[SIZE];
void save() {
int i;
FILE *fp;
if((fp=fopen("stu.dat","rb+"))==NULL)
{printf("文件打开失败\n");
exit(0);}
for(i=0;i<SIZE;i++)
if(fwrite(&std[i],sizeof(struct student),1,fp)!=1)
/*将内存中的数据输出到磁盘文件中*/
printf("文件保存失败\n");}
void main(){
int j,i;
char c;
FILE *fp;
if((fp=fopen("stu.dat","ab+"))==NULL) {
printf("文件打开失败\n");
exit(0);
}
for(i=0;i<SIZE;i++)
fread(&std[i],sizeof(struct student),1,fp);
/*将fp所指向的文件中的数据存储到数组std中*/
printf("*************欢迎使用上课随机点名程序**************\n");
printf("******输入a: 显示所有同学名称*********\n");
printf("******输入d: 开始点名*********\n");
printf("******输入s: 保存点名*********\n");
printf("******输入b: 点名次数归零*********\n");
printf("******输入q: 退出*********\n");
printf("******************************************\n");
//printf("\t\t%s\t\t%s\t\t被点名%d次\n",std[i].num,std[i].name,std[i].time);
while(1) {
c=getchar();
switch(c) {
case 'a': for(i=0;i<SIZE;i++)
printf("%d000%s",i,std[i].num);
break;
case 's': save();
printf("****文件保存成功!退出请按q****\n");
break;
case 'b': for(i=0;i<SIZE;i++)
std[i].time1=0;
printf("点名次数归%d\n",std[i].time1);
break;
case 'q':exit(0);
case 'd':
loop:j=rand()/1000;
/*调用rand的函数进行点名*/
if(j==0){
std[0].time1++;
printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}
else if(j==1){
std[1].time1++;
printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}
else if(j==2){
std[2].time1++;
printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}
else if(j==3){
std[3].time1++;
printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}
else goto loop;
break;}}
fclose(fp);}
文本内容(学生学号以及姓名)
执行结果显示(整个文本内容都放在了i=0的位置)