typedef,在两个函数中找不到错误

时间:2015-11-06 01:03:15

标签: c function struct

我试图在C中创建一个允许我存储学生信息的程序。我们的想法是创建一个新的数据类型,然后使用它来创建一些函数来操作数据。特别是在某一点上,我必须找到一个小组中最年长的学生,然后使用其他功能打印出其细节。我所做的功能应该是找到组中的最大年龄不起作用。任何人都可以找到错误吗?特别是我认为不起作用的函数是calcmax和find。还有ano bug,但是当我在main中调用calcmax并尝试打印结果时会出现一些随机数,就是这样。我认为其中一个循环中的逻辑存在问题,但我找不到它。非常感谢。

typedef struct{
char f[MAXIM];
char s[MAXIM];
char id[MAXIM];
char dep[MAXIM];
char g;
int age;
}student_t;

student_t mkstud(char first[],char sec[], char idn [],char de[], char sex, int eta){
student_t person;
strcpy(person.f,first);
strcpy(person.s,sec);
strcpy(person.id,idn);
strcpy(person.dep,de);
person.g = sex;
person.g = eta;
return person;
}

student_t scstud(){
char first[MAXIM],sec[MAXIM],idn[MAXIM],de[MAXIM];
char sex;
int eta;
student_t person;
printf("name ");
scanf("%s",first);
printf("surname ");
scanf("%s",sec);
printf("id ");
scanf("%s", idn);
printf("depart ");
scanf("%s",de);
printf("sex ");
scanf(" %c",&sex);
printf("age ");
scanf(" %d", &eta);
person= mkstud(first,sec,idn,de,sex,eta);
return person;
}


int calcmax(student_t *class, int length){
int diff,i;
int max[MAXIM];
diff=class[0].age-class[1].age;
if(diff>=0){
    max[0]=class[0].age;
}
else if(diff<0){
    max[0]=class[1].age;
}
max[1]=max[0];
for (i=0;i<length;i++){
    if (max[i]>=class[i+1].age){
        max[i+1]=max[i];
    }
    else if(max[i]<class[i+1].age){
        max[i+1]=class[i+1].age;
    }

}
    return max[length];
}
void printdetails(student_t std){
printf("name: %s",std.f);
printf("surname: %s",std.s);
printf("ID: %s",std.id);
printf("department: %s",std.dep);
printf("gender: %c",std.g);
printf("age: %d",std.age);
}

/*void find(student_t *class, int length){
int std,i;
std = calcmax(class, length);
for(i=0;i<=length-1;i++){
    if (std==class[i].age) {
         printdetails(class[i]);
    }

}
}*/
int main(void){
int i,j;
student_t class[6];
class[0]= mkstud("John","Bishop","s1234","inf", 'm',18);
class[1]=mkstud("Lady","Cook","s2345","Eng",'f',21);
class[2]=mkstud("James","Jackson","s3456","Eng",'m',17);
for(i=4;i<=6;i++){
    printf(" student %d \n", i);
    class[i-1]=scstud();
}
j=calcmax(class, 6);
printf("%d", j);


/*find(class, 3);*/
return EXIT_SUCCESS;}

1 个答案:

答案 0 :(得分:0)

我看到的问题:

  1. mkstud中的小错误。您要将性别和年龄分配给结构的g成员。

    person.g = sex;
    person.g = eta;
    

    应该是:

    person.g = sex;
    person.age = eta;
    
  2. 您尚未在max中初始化数组calcmax

  3. calcmax中的逻辑存在缺陷。如果您在正确的位置添加printf语句,则可以看到max[length]被分配了错误的值。

    int calcmax(student_t *class, int length){
       int diff,i;
       int max[MAXIM] = {0};
       diff=class[0].age-class[1].age;
       if(diff>=0){
          max[0]=class[0].age;
       }
       else if(diff<0){
          max[0]=class[1].age;
       }
       max[1]=max[0];
    
       // ADDED
       printf("max[0]: %d\n", max[0]);
       printf("max[1]: %d\n", max[1]);
    
       for (i=0;i<length;i++){
          if (max[i]>=class[i+1].age){
             max[i+1]=max[i];
    
             // ADDED
             printf("max[%d]: %d\n", i+1, max[i+1]);
          }
          else if(max[i]<class[i+1].age){
             max[i+1]=class[i+1].age;
    
             // ADDED
             printf("max[%d]: %d\n", i+1, max[i+1]);
          }
       }
    
       // ADDED
       printf("max[%d]: %d\n", length, max[length]);
       return max[length];
    }
    

    您可以尝试修复相当复杂的功能,但可以简化。

    int calcmax(student_t *class, int length){
    
       if ( length <= 0 )
       {
          return -1;
       }
    
       int max = class[0].age;
       for (int i = 1; i < length; ++i )
       {
          if ( max < class[i].age )
          {
             max = class[i].age;
          }
       }
       return max;
    }
    
相关问题