其中一个输出在一个简单的struct程序上显示(null)结果(没有struct数组)

其中一个输出在一个简单的struct程序上显示(null)结果(没有struct数组),c,struct,C,Struct,我创建了一个简单的程序,用于显示大学生数据,计算分数累积到年级(a、B、C、D、E),并使用struct(我禁止使用struct数组创建),因此问题在于输出结果之一,即“grade”在使用%s打印时给出(空)结果,在使用%C打印时给出完全空白的结果。顺便说一下,“等级”数据的类型是char。这是完整的代码 #include<stdio.h> #include<string.h> #include<stdlib.h> #include <ctype.h&g

我创建了一个简单的程序,用于显示大学生数据,计算分数累积到年级(a、B、C、D、E),并使用struct(我禁止使用struct数组创建),因此问题在于输出结果之一,即“grade”在使用%s打印时给出(空)结果,在使用%C打印时给出完全空白的结果。顺便说一下,“等级”数据的类型是char。这是完整的代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <ctype.h>

struct student
{
char nim[11];
char name[100];
char subjectCode[5];
int sks;
char grade;
}studentScore[100];

bool cekKarakter(char input[])
{
for(int x = 0; x < strlen(input); x++)
{
    if(isdigit(input[x]))
    return false;
}
return true;
}

bool cekNumeric(char input[])
{
for(int x = 0; x < strlen(input); x++)
{
    if(input[x] >= 48 && input[x] <= 57)
    return false;
}
return true;
}

int main()
{
int n;
printf("Input number of Student Data: ");
scanf("%d", &n); 
fflush(stdin);
printf("\n\n");
for(int i = 1; i <= n; i++)
{
    do
    {
        printf("NIM [Hanya numerik][10 Digit]: ");
        gets(studentScore[i].nim);
        fflush(stdin);
    }
    while(strlen(studentScore[i].nim) != 10 || 
 cekNumeric(studentScore[i].nim));

    printf("\n");

    do
    {
        printf("Name [Hanya karakter]: ");
        gets(studentScore[i].name); 
        fflush(stdin);
    }
    while(strlen(studentScore[i].name) < 5 || strlen(studentScore[i].name) > 
 30 || cekKarakter(studentScore[i].name) == false);

    printf("\n");

    do
    {
        printf("Subject Code [Must 5 length]: ");
        gets(studentScore[i].subjectCode); 
        fflush(stdin);
    }
    while(strlen(studentScore[i].subjectCode) != 5);

    printf("\n");

    do
    {
        printf("SKS [Min 2|Max 8]: ");
        scanf("%d", &studentScore[i].sks); 
        fflush(stdin);
    }
    while(studentScore[i].sks < 2 || studentScore[i].sks > 8);

    printf("\n");

    int score[5];
    int WeightGrade = 0; 

    printf("Input 5 College Subject Score:\n\n");
    for(int z = 0; z < 5; z++)
    {
        do
        {
            printf("Input Score[%d][Must be between 0 and 100]: ", z + 1);
            scanf("%d", &score[z]);
        }
        while(score[z] < 0 || score[z] > 100);

        WeightGrade += score[z];
    }

    if(WeightGrade / 25 == 4)
    {
        studentScore[i].grade = 'A';
    }
    else if(WeightGrade / 25 >= 3 && WeightGrade / 25 < 4)
    {
        studentScore[i].grade = 'B';
    }
    else if(WeightGrade / 25 >= 2 && WeightGrade / 25 < 3)
    {
        studentScore[i].grade = 'C';
    }
    else if(WeightGrade / 25 >= 1 && WeightGrade / 25 < 2)
    {
        studentScore[i].grade = 'D';
    }
    else if(WeightGrade / 25 == 0)
    {
        studentScore[i].grade = 'E';
    }
}

printf("\nStudent Data\n");

for(int i = 1; i <= n; i++)
{
    printf("NIM: %s\nName: %s\nSubject Code: %s\nSKS: %d\nGrade: %s\n",
        studentScore[i].nim, 
        studentScore[i].name, 
        studentScore[i].subjectCode, 
        studentScore[i].sks, 
        studentScore[i].grade); 
}
getchar();

return 0;
}
#包括
#包括
#包括
#包括
结构学生
{
char-nim[11];
字符名[100];
字符主题代码[5];
int sks;
煤焦品位;
}学生成绩[100];
bool-cekKarakter(字符输入[])
{
对于(int x=0;x=48&&input[x]8);
printf(“\n”);
整数分[5];
int权重等级=0;
printf(“输入5大学科目分数:\n\n”);
对于(intz=0;z<5;z++)
{
做
{
printf(“输入分数[%d][必须介于0和100之间]:”,z+1);
scanf(“%d”、&score[z]);
}
而(分数[z]<0 | |分数[z]>100);
权重等级+=得分[z];
}
如果(权重等级/25==4)
{
学生成绩[i]。成绩='A';
}
否则如果(权重等级/25>=3和权重等级/25<4)
{
学生成绩[i]。成绩='B';
}
否则如果(权重等级/25>=2和权重等级/25<3)
{
学生成绩[i]。成绩='C';
}
否则如果(权重等级/25>=1和权重等级/25<2)
{
学生成绩[i]。成绩='D';
}
否则如果(权重等级/25==0)
{
学生成绩[i]。成绩='E';
}
}
printf(“\n学生数据\n”);

对于代码中的(inti=1;i,WeightGrade实际上是所有等级的总和,因此对于您的示例-WeightGrade=370

370/25不在任何选项范围内,因此studentScore[i]。grade不会获得任何值。为防止出现这种情况,请始终输入显示错误的else子句

因为您有5个值,所以应该除以5*25=125,就像在WeightGrade/125中一样


同样对于printf,您不应该在char值上使用%s,您应该使用%c

尝试添加一个else子句,在if-else-if块中测试WeightGrade时将等级设置为“?”,然后您会看到错误谢谢您提供的调试方法,每次遇到此问题时,我都会记住这一点。在更改eq后,我立即解决了此问题根据5分累积,评估从25除以125,并使用%c(因为单字符)而不是%s更改打印结果。感谢您更正此问题。如果这解决了您的问题,请将其标记为已回答