填空题 给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
不得增行或删行,也不得更改程序的结构。
#include<stdio.h>
#include<stdlib.h>
#defineN 5
typedef struct
{int num;
char name[10];
char tel[10];
}STYPE;
void check();
/**********foun**********/
int fun( 1*std)
{
/**********found**********/
2*fp;int i;
if((fp=fopen("myfile5.dat","wb"))==NULL)
return(0);
printf("/nOutput data to file!/n");
for(i=0;i<N;i++)
/**********foun**********/
fwrite(&std[i],sizeof(STYPE),1, 3);
fclose(fp);
return(1);
}
main()
{STYPE s[10]={{1,"aaaaa","111111"),{1,"bbbbb",
"222222"},{1,"ccccc","333333"),{1,"ddddd",
"444444"},{1,"eeeee","555555"));
int k;
k=fun(s);
if(k==1)
{printf("Succeed!");check();}
else
printf("Fail!");
}
void check()
{FILE*fp;int i;
STYPE s[10];
if((fp=fopen("myfile5.dat","rb"))==NULL)
{printf("Fail!!/n");exit(0);}
printf("/nRead file and output to screen:/n");
printf("/n num name tel/n");
for(i=0;i<N;i++)
{fread(&s[i],sizeof(STYPE),1,fp);
printf("%6d %s %s/n",s[i].num,s[i].name,
s[i].tel);
}
fclose(fp);
}
【正确答案】
【答案解析】STYPE FILE fp [解析] 本题要求调用fun函数建立班级通讯录,将结构体数组s的内容存储到文件myfile5.dat中。文件操作首先是打开文件,然后向文件中写入内容。
第一空:在main函数中,观察fun函数调用k=fun(s),由s的定义可知s是STYPE结构体数组,即传入fun函数的参数是STYPE结构体数组的首地址,因此fun()函数的参数是STYPE结构体指针。故(1)处应该为int fun(STYPE*std)。
第二空:在C语言中,fopen函数的调用形式是:FILE fp=fopen(文件名,文件使用方式),在fun()函数体内部,由if((fp=fopen("myfile5.dat","wb"))=NULL)可知,fp是一个指向FILE类型的指针变量。因此(2)处是指针变量fp的定义,即FILE*fp。
第三空:fwrite函数的调用形式是:fwrite(buffer,size,count,fp),buffer是一个指针,指向输入数据存放在内存区的起始地址,size是要输入的字节数,count是要输入大小为size个字节的数据块的个数,fp是文件指针。因此(3)处应该添加文件指针。由前面的定义可知,fun函数内的文件指针是fp,即(3)处是。fwrite(&std[i],sizeof(STYPE),1,fp)。
[考点] 结构体指针;文件操作。