输出之一在简单的struct程序上显示(空)结果(无结构数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输出之一在简单的struct程序上显示(空)结果(无结构数组)相关的知识,希望对你有一定的参考价值。

我已经创建了一个简单的程序,用于显示大学生数据并计算分数累计到一个年级(A,B,C,D,E)并使用struct(禁止使用Struct Array创建Im),因此问题是输出之一,当用%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;

这是程序运行时的图像(null) output result using %s as printed

答案

在您的代码中,WeightGrade实际上是所有成绩的总和,因此对于您的示例-WeightGrade = 370。

370/25不属于任何选项,因此StudentScore [i] .grade没有任何价值。为了避免这种情况,请始终输入显示错误的else子句

由于有5个值,因此应除以5 * 25 = 125,如WeightGrade / 125中所示

对于printf,也不应在字符值上使用%s,而应使用%c

以上是关于输出之一在简单的struct程序上显示(空)结果(无结构数组)的主要内容,如果未能解决你的问题,请参考以下文章

App.post 返回空的花括号集

使用 opencv 在 GPU 上调整图像大小会产生空输出矩阵

如何在输出中调用具有聚合结果的存储过程?

汇编语言编写由键盘输入10个4位的数据并将这些数小到大进行排序其结果输出在显示屏上的程序 。

7.qfilesystemmodel rowcount 为什么为0? 一个简单的model类的例子

sed命令