簡體   English   中英

typedef,在兩個函數中找不到錯誤

[英]typedef, can't find error in two functions

我試圖用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. mkstud較小錯誤。 您正在為性別的g成員分配性別和年齡。

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

    應該是:

     person.g = sex; person.age = eta; 
  2. 您尚未在calcmax初始化數組max

  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; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM