user-0 提问: 小白求救        C语言 将文件内容读入结构体后，无法对结构体内数据进行处理，请问是哪里错了

回复:
user: user-0
content: 文件内容 10101  m1    85    90   4000 10102  m2    72    65   2500 10103  m3    66    47   1750 10104  m4    40    87   3700 10105  m5    72    91   3600 10106  m6    84    48   1800 10107  m7    90    80   3060 10108  m8    57    84   3200 10109  m9    77    99   4300 10110  m10   81    83   3300 10111  m11   90    44   2020 10112  m12   54    92   4150 10113  m13   75    80   3000 10114  m14   52    64   2250 10115  m15   75    57   2260 10116  m16   76    79   2730 10117  m17   38    95   4220 10118  m18   68    95   4250 10119  m19   80    67   2350 10120  m20   80    58   2050 10121  m21   82    60   2100 10122  m22   53    80   3220 10123  m23   56    94   3640 10124  m24   74    75   2800 10125  m25   84    71   2530 10126  m26   90    90   4000 10127  m27   91    70   2520 10128  m28   80    93   3950 10129  m29   91    66   2320 10130  m30   39    83   3150

user: user-0

user: user-1
content: for(j = 0;j<30;j++)     { if(class1[j].jump>60 && class1[j].run>60) { printf("%d  %s  %d  %d  %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath); }     }  ============================= for (i = 1; i <= nr+1; i++)	{	 fgets(buf, N, fp);    	 sscanf(buf, "\n  %d     %s    %d    %d\n", &line1[i].id, &line1[i].name, &line1[i].jump,&line1[i].run);	  你的class1和读入结构体的 line1有关系吗？

user: user-2
content: fgets(buf, N, fp); 这句也很可能读不全一行内容，建议把buf定义成128或256，当然要根据一行数据的字节数来定～

user: user-2
content: #include<stdio.h> #include <string.h> #include<stdlib.h>  #define N 32  struct object {     int id;     char *name;     int jump;     int run;         int breath;     int weight; }class1[N];  void open();  int main(void) {     int number;     printf("               1.查询合格学生\n");     printf("               0.退出系统\n");     printf("               请输入数字指令：\n");     scanf("%d",&number);      while (!(number>=0&&number<=8))     {         printf("               没有这个选项，请重新输入：\n");     }      switch(number)     {         case 0:         {             printf("               已退出管理系统");             return 0;         }         case 1:         {              int j;             open();             for(j = 0;j<30;j++)             {                 if(class1[j].jump>60 && class1[j].run>60)                 {                     printf("%d  %s  %d  %d  %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath);                 }             }             printf("-------------------------------------------------\n");              break;         }         /*         case 0:{    //这是做啥？一个switch中两个case 0？                    printf("已退出管理系统");                    return 0;                    break;                }                */      }     return 0; } void open() {     FILE *fp;     int i,j,nr = 0;     char buf[N],c;     fp = fopen("class.txt", "r");     if (fp == NULL) {    //既然文件无法打开了，为啥不退出函数呢？还要继续往下执行吗？那样不就出错了嘛         printf("文件无法打开\n");         return;   //退出      }     while (!feof(fp)) {         c = fgetc(fp);         if (c == '\n')             nr++;     }     printf("nr=%d\n", nr);     rewind(fp);     struct object*line1 = NULL;     //line1= (struct object*)malloc(sizeof(struct object)*(nr+1));     line1= (struct object*)malloc(sizeof(struct object)*(nr));     //for (i = 1; i <= nr+1; i++) {     for (i = 0; i < nr; i++) {         fgets(buf, N, fp);         //sscanf(buf, "\n  %d     %s    %d    %d\n", &line1[i].id, &line1[i].name, &line1[i].jump,&line1[i].run);         sscanf(buf, "\n  %d     %s    %d    %d\n", &line1[i].id, line1[i].name, &line1[i].jump,&line1[i].run);     }     if (nr > N)         nr = N;     memcpy(class1, line1, sizeof(struct object) * nr);     free(line1); }  供参考～  要处理首先需要给class1赋值呢，你把读到的数据放到line1中，然后呢？数据会自动到class1中？

user: user-0
content: for(j = 0;j<30;j++)     { if(class1[j].jump>60 && class1[j].run>60) { printf("%d  %s  %d  %d  %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath); }

user: user-0
content: case1中就是

user: user-1
content: 没有看到处理的语句

user: user-3
content: 你想怎么处理？

user: user-3
content: 你想怎么处理？