C数组指针结构检索信息

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

这就是我得到的Q:

编写包含以下类型定义的程序:

  • 包含以下成员的学生结构:
    • 学生身份证
    • 等级类型(0表示字符等级,1表示整数等级)
    • 学生的分数(可以是字符级,如“B”或整数级,如84)
  • 包含以下成员的联合等级:
    • 炭黑
    • 英特格拉德
  • 你的程序应该创建一个指针数组来构造大小为5的学生并从中填充 使用者然后,它应该打印出成绩为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
    
    我的输出:

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