C数组指针结构检索信息
这就是我得到的Q: 编写包含以下类型定义的程序:C数组指针结构检索信息,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,这就是我得到的Q: 编写包含以下类型定义的程序: 包含以下成员的学生结构: 学生身份证 等级类型(0表示字符等级,1表示整数等级) 学生的分数(可以是字符级,如“B”或整数级,如84) 包含以下成员的联合等级: 炭黑 英特格拉德 你的程序应该创建一个指针数组来构造大小为5的学生并从中填充 使用者然后,它应该打印出成绩为A的学生的信息 我很确定我的问题在最后一部分 期望值: Enter ID: 111 0 for char grade or 1 for int grade: 0 Enter
- 学生身份证
- 等级类型(0表示字符等级,1表示整数等级)
- 学生的分数(可以是字符级,如“B”或整数级,如84)
- 炭黑
- 英特格拉德
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
我的输出:
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
代码:
#包括
#包括
#包括
#包括
结构等级{
内部评级;
煤焦品位[1];
};
结构学生{
字符ID[20];
char-typeG[1];
结构等级;
};
int main(){
int i=0;
结构学生标准[5];
结构Student*ptr=NULL;
ptr=std;
对于(i=0;i<5;i++){
printf(“输入ID:”);
scanf(“%s”,ptr->ID);
printf(“0表示字符等级,1表示整数等级:”);
scanf(“%s”,ptr->typeG);
如果(strcmp(ptr->typeG,“0”)==0){
printf(“输入字符等级:”);
scanf(“%s”,ptr->Grade.charGrade);
}否则{
printf(“输入整数等级:”);
scanf(“%d”,&ptr->Grade.intGrade);
}
}
i=0;
printf(“***成绩为“A”的学生是/是***”);
对于(i=0;i<5;i++){
如果(strcmp(ptr->Grade.charGrade,“A”)==0){
printf(“\nID:%s”,ptr->ID);
printf(“\n等级:%s”,ptr->Grade.charGrade);
}
如果(ptr->Grade.intGrade>=90){
printf(“\nID:%s”,ptr->ID);
printf(“\n等级:%d”,ptr->Grade.intGrade);
}
}
返回0;
}
对于(i=0;i<5;i++){
如果(strcmp(ptr->Grade.charGrade,“A”)==0){
printf(“\nID:%s”,ptr->ID);
printf(“\n等级:%s”,ptr->Grade.charGrade);
}
如果(ptr->Grade.intGrade>=90){
printf(“\nID:%s”,ptr->ID);
printf(“\n等级:%d”,ptr->Grade.intGrade);
}
}
说明书上说
创建指向学生结构的指针数组
是一个结构数组,而不是指针数组。指针数组如下所示:
struct Student* std[5] ;
然后您需要为每个学生结构分配内存
for (i = 0; i < 5; i++) {
std[i] = malloc(sizeof(*std[i]));
ptr = std[i];
...
}
你不应该创建5个新的Student结构吗;scanf(“%s”,std[i]->ID)等…数组应该是struct Student*std[5]代码>@OmidCompSCI它被标记为c
,所以它应该是malloc而不是new,对吗?@JerryJeremiah,没错。同样的基本概念,但他们需要去哪里。
#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;
}