user-0 提问: 改正错误

回复:
user: user-1
content: 改这样试试：#include  <stdio.h>  struct  stu{         int  id;  //学号         char name[20];//姓名         int  age;  //年龄         int  score;  //成绩 };  int  main(){              //声明函数及变量         void   readFileForStu(struct  stu  *p,  int  num,  char  filename[],char  mode[]);         void   stdoutForStu(struct  stu  *p,  int  num);         const  int  NUM  =  2;     //学生数量         struct  stu  students[NUM]; //stu型数组         struct  stu  *p  = students;  //指向stu型一维数组型指针         char  filename[] = "ex804.txt"; //待读取的文件路径及名称          ///文件获取输入         readFileForStu(p,NUM,filename,"r");          //向屏幕输出显示         stdoutForStu(p,NUM);                  return  0; }  // //  *  函数名称：readFileForStu //  *  函数功能：从文件格式化读取数据 //  *  写入格式：共读取  num  行；每行读出一个  stu  型数据，每个成员变量之间用空格分隔 //  *  形式参数：struct  stu  *  p，指向  stu  型一维数组首地址。该数组用于保存文件读取数据 //  *  形式参数：int  num，一维数组元素个数，也即读取文件的行数 //  *  形式参数：char  filename[]，待读取的文件路径及名称 //  *  形式参数：char  mode[]，文件使用方式 //  *  返  回  值：无  void  readFileForStu(struct  stu  *p,  int  num,  char  filename[],char  mode[]) {         //  请编程实现本函数         int i;         FILE *fp;         fp=fopen(filename,mode);         if(fp==NULL){            printf("Open file fail!\n");            return;         }         for(i=0;i<num;i++)         {          //fread(&p[i],sizeof(struct stu),1,fp);          fscanf(fp,"%d%s%d%d",&p[i].id,p[i].name,&p[i].age,&p[i].score);         }         fclose(fp); }  // //  *  函数名称：stdoutForStu //  *  函数功能：向显示器输出显示数据 //  *  输出格式：共输出  num  行；每行输出一个  stu  型数据，每个成员变量之间用空格分隔 //  *  形式参数：struct  stu  *  p，指向  stu  型一维数组首地址 //  *  形式参数：int  num，一维数组元素个数 //  *  返  回  值：无  void  stdoutForStu(struct  stu  *p,  int  num) {         //  请编程实现本函数         int i;         for(i=0;i<num;i++)             printf("%d %s %d %d\n",p[i].id,p[i].name,p[i].age,p[i].score); }  //1 libai 100 100 //2 lihei 200 200 //请按任意键继续. . .  //10001 ZhangSan 25 99 //10002 ZhaoLiu 18 100 //请按任意键继续. . .

user: user-0
content: 引用 2 楼 qzjhjxj的回复:修改如下，供参考：#include  <stdio.h>  struct  stu{         int  id;  //学号         char name[20];//姓名         int  age;  //年龄         int  score;  //成绩 };  int  main(){              /*声明函数及变量*/         void   readFileForStu(struct  stu  *p,  int  num,  char  filename[],char  mode[]);         void   stdoutForStu(struct  stu  *p,  int  num);         const  int  NUM  =  2;     //学生数量         struct  stu  students[NUM]; //stu型数组         struct  stu  *p  = students;  //指向stu型一维数组型指针         char  filename[] = "ex804.txt"; //待读取的文件路径及名称          /*从文件获取输入*/         readFileForStu(p,NUM,filename,"r");          /*向屏幕输出显示*/         stdoutForStu(p,NUM);                  return  0; }  /*   *  函数名称：readFileForStu   *  函数功能：从文件格式化读取数据   *  写入格式：共读取  num  行；每行读出一个  stu  型数据，每个成员变量之间用空格分隔   *  形式参数：struct  stu  *  p，指向  stu  型一维数组首地址。该数组用于保存文件读取数据   *  形式参数：int  num，一维数组元素个数，也即读取文件的行数   *  形式参数：char  filename[]，待读取的文件路径及名称   *  形式参数：char  mode[]，文件使用方式   *  返  回  值：无     */ void  readFileForStu(struct  stu  *p,  int  num,  char  filename[],char  mode[]) {         //  请编程实现本函数         int i;         FILE *fp;         fp=fopen(filename,mode);         if(fp==NULL){            printf("Open file fail!\n");            return;         }         for(i=0;i<num;i++)         {          fread(&p[i],sizeof(struct stu),1,fp);         }         fclose(fp); }  /*   *  函数名称：stdoutForStu   *  函数功能：向显示器输出显示数据   *  输出格式：共输出  num  行；每行输出一个  stu  型数据，每个成员变量之间用空格分隔   *  形式参数：struct  stu  *  p，指向  stu  型一维数组首地址   *  形式参数：int  num，一维数组元素个数     *  返  回  值：无     */ void  stdoutForStu(struct  stu  *p,  int  num) {         //  请编程实现本函数         int i;         for(i=0;i<num;i++)             printf("%d %s %d %d\n",p[i].id,p[i].name,p[i].age,p[i].score); }  //1 jjjj 18 90 //2 kkkk 19 91 //请按任意键继续. . . 大佬，我把你的程序放在测试平台上跑了一遍。输出结果不正确 测试数据1输出错误   错误输出： 1768693809 bai 100 1002 lihei 200 200 540028978 31580664196240  0 0 期望输出： 1 libai 100 1002 lihei 200 200 测试数据2输出错误   错误输出： 808464433 1 ZhangSan 25 9910002 ZhaoLiu 18 100@ 1512059440 1282367848824210793 8 100@ 0 0 期望输出： 10001 ZhangSan 25 9910002 ZhaoLiu 18 100

user: user-1
content: 修改如下，供参考：#include  <stdio.h>  struct  stu{         int  id;  //学号         char name[20];//姓名         int  age;  //年龄         int  score;  //成绩 };  int  main(){              /*声明函数及变量*/         void   readFileForStu(struct  stu  *p,  int  num,  char  filename[],char  mode[]);         void   stdoutForStu(struct  stu  *p,  int  num);         const  int  NUM  =  2;     //学生数量         struct  stu  students[NUM]; //stu型数组         struct  stu  *p  = students;  //指向stu型一维数组型指针         char  filename[] = "ex804.txt"; //待读取的文件路径及名称          /*从文件获取输入*/         readFileForStu(p,NUM,filename,"r");          /*向屏幕输出显示*/         stdoutForStu(p,NUM);                  return  0; }  /*   *  函数名称：readFileForStu   *  函数功能：从文件格式化读取数据   *  写入格式：共读取  num  行；每行读出一个  stu  型数据，每个成员变量之间用空格分隔   *  形式参数：struct  stu  *  p，指向  stu  型一维数组首地址。该数组用于保存文件读取数据   *  形式参数：int  num，一维数组元素个数，也即读取文件的行数   *  形式参数：char  filename[]，待读取的文件路径及名称   *  形式参数：char  mode[]，文件使用方式   *  返  回  值：无     */ void  readFileForStu(struct  stu  *p,  int  num,  char  filename[],char  mode[]) {         //  请编程实现本函数         int i;         FILE *fp;         fp=fopen(filename,mode);         if(fp==NULL){            printf("Open file fail!\n");            return;         }         for(i=0;i<num;i++)         {          fread(&p[i],sizeof(struct stu),1,fp);         }         fclose(fp); }  /*   *  函数名称：stdoutForStu   *  函数功能：向显示器输出显示数据   *  输出格式：共输出  num  行；每行输出一个  stu  型数据，每个成员变量之间用空格分隔   *  形式参数：struct  stu  *  p，指向  stu  型一维数组首地址   *  形式参数：int  num，一维数组元素个数     *  返  回  值：无     */ void  stdoutForStu(struct  stu  *p,  int  num) {         //  请编程实现本函数         int i;         for(i=0;i<num;i++)             printf("%d %s %d %d\n",p[i].id,p[i].name,p[i].age,p[i].score); }  //1 jjjj 18 90 //2 kkkk 19 91 //请按任意键继续. . .

user: user-2
content: fp=fopen("ex804.txt","mode");  这条语句不会，应该是fp=fopen("ex804.txt",mode); 这条语句的错误会导致文件无法打开，导致fp为NULL，后面就可能会引发异常。