[英]C array pointers struct retrieving the info
所以這是 QI 得到的:
編寫一個包含以下類型定義的程序:
- 包含以下成員的結構 Student:
- 學生身份證
- 等級類型(字符等級為 0,整數等級為 1)
- 學生的成績(可以是字符級,例如“B”或整數級,例如 84)
- 包含以下成員的聯合 StuGrade:
- 字符級
- 中級
您的程序應該創建一個指向大小為 5 的結構 Student 的指針數組,並由用戶填充它。 然后它應該打印獲得 A 級成績的學生信息。
我很確定我的問題在最后一部分
預期的 :
Enter ID: 111
0 for char grade or 1 for int grade: 0
Enter a char grade: A
Enter ID: 112
0 for char grade or 1 for int grade: 0
Enter a char grade: C
Enter ID: 113
0 for char grade or 1 for int grade: 1
Enter an int grade: 84
Enter ID: 114
0 for char grade or 1 for int grade: 1
Enter an int grade: 99
Enter ID: 115
0 for char grade or 1 for int grade: 0
Enter a char grade: A
***Student(s) who take grade 'A' is/are***
ID: 111
Grade: A
ID: 114
Grade: 99
ID: 115
Grade: A
我的輸出:
Enter ID: 111
0 for char grade or 1 for int grade:0
Enter a char grade:A
Enter ID: 112
0 for char grade or 1 for int grade:0
Enter a char grade:C
Enter ID: 113
0 for char grade or 1 for int grade:1
Enter an int grade:84
Enter ID: 114
0 for char grade or 1 for int grade:1
Enter an int grade:99
Enter ID: 115
0 for char grade or 1 for int grade:0
Enter a char grade:A
***Student(s) who take grade 'A' is/are***
ID : 115
Grade: A
ID : 115
Grade: A
ID : 115
Grade: A
ID : 115
Grade: A
ID : 115
Grade: A
代碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
struct StuGrade{
int intGrade;
char charGrade[1];
};
struct Student{
char ID[20];
char typeG[1];
struct StuGrade Grade;
};
int main(){
int i = 0;
struct Student std[5] ;
struct Student *ptr = NULL ;
ptr = std ;
for (i = 0; i < 5; i++) {
printf("Enter ID: ");
scanf("%s", ptr->ID);
printf("0 for char grade or 1 for int grade:");
scanf("%s", ptr->typeG);
if(strcmp(ptr->typeG,"0") == 0){
printf("Enter a char grade:");
scanf("%s", ptr->Grade.charGrade);
}else{
printf("Enter an int grade:");
scanf("%d", &ptr->Grade.intGrade);
}
}
i =0;
printf("***Student(s) who take grade 'A' is/are***");
for (i = 0; i < 5; i++) {
if(strcmp(ptr->Grade.charGrade,"A") == 0){
printf("\nID : %s",ptr->ID);
printf("\nGrade: %s",ptr->Grade.charGrade);
}
if(ptr->Grade.intGrade >= 90){
printf("\nID : %s",ptr->ID);
printf("\nGrade: %d",ptr->Grade.intGrade);
}
}
return 0;
}
for (i = 0; i < 5; i++) {
if(strcmp(ptr->Grade.charGrade,"A") == 0){
printf("\nID : %s",ptr->ID);
printf("\nGrade: %s",ptr->Grade.charGrade);
}
if(ptr->Grade.intGrade >= 90){
printf("\nID : %s",ptr->ID);
printf("\nGrade: %d",ptr->Grade.intGrade);
}
}
說明說
創建指向結構 Student 的指針數組
struct Student std[5] ;
是一個結構數組,而不是一個指針數組。 指針數組如下所示:
struct Student* std[5] ;
然后你需要為每個Student
結構分配內存。
for (i = 0; i < 5; i++) {
std[i] = malloc(sizeof(*std[i]));
ptr = std[i];
...
}
另一個問題是char charGrade[1];
不夠大,無法與等級保持一致。 一個字符串需要一個額外的字符作為空終止符,因此需要聲明一個 1 個字符的字符串char charGrade[2];
. typeG
(盡管我不確定您為什么首先為此使用字符串,但它看起來應該是int
)。
完整更正的程序是:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct StuGrade{
int intGrade;
char charGrade[2];
};
struct Student{
char ID[20];
char typeG[2];
struct StuGrade Grade;
};
int main(){
int i = 0;
struct Student* std[5] ;
for (i = 0; i < 5; i++) {
std[i] = malloc(sizeof(*std[i]));
ptr = std[i];
printf("Enter ID: ");
scanf("%s", ptr->ID);
printf("0 for char grade or 1 for int grade:");
scanf("%s", ptr->typeG);
if(strcmp(ptr->typeG,"0") == 0){
printf("Enter a char grade:");
scanf("%s", ptr->Grade.charGrade);
}else{
printf("Enter an int grade:");
scanf("%d", &ptr->Grade.intGrade);
}
}
i =0;
printf("***Student(s) who take grade 'A' is/are***");
for (i = 0; i < 5; i++) {
ptr = std[i];
if(strcmp(ptr->Grade.charGrade,"A") == 0){
printf("\nID : %s",ptr->ID);
printf("\nGrade: %s",ptr->Grade.charGrade);
}
if(ptr->Grade.intGrade >= 90){
printf("\nID : %s",ptr->ID);
printf("\nGrade: %d",ptr->Grade.intGrade);
}
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.