填空题

下列给定程序的功能是调用 fun 函数建立班级通信录。 通信录中记录每位学生的编号、 姓名和电话号码。 班级人数和学生信息从键盘读入, 每个人的信息作为一个数据块写到名为 myfile5.dat 的二进制文件中。
请在程序的下画线处填入正确的内容并将下画线删除, 使程序得出正确的结果。
注意:
不得增行或删行, 也不得更改程序的结构!
【试题源程序】

#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct
{
   int num;
   char name[10];
   char tel[10];
}STYPE;
void check();
/**********found**********/
int fun(①______ *std)
{
   /**********found**********/
   ②______ *fp; int i;
   if((fp=fopen("myfile5.dat","wb"))==NULL)return(0);
   printf("\nOutput data to file! \n");
   for(i=0;i<N;i++)
      /**********found**********/
      fwrite(&std[i],sizeof(STYPE),1, ③______);
   fclose(fp);
   return(1);
}
void 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

【答案解析】

填空 1: 根据主函数中的调用函数 fun(s)可知, 函数 fun()的形参应为结构体类型, 因此填入 STYPE。
填空 2: fp 是指向文件类型的指针变量, 因此填入 FILE。
填空 3: 函数 fwrite 调用的一般形式为“fwrite(buffer,size,count,fp);”, 其中, fp 表示文件指针。