输出之一在简单的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程序上显示(空)结果(无结构数组)的主要内容,如果未能解决你的问题,请参考以下文章
使用 opencv 在 GPU 上调整图像大小会产生空输出矩阵
汇编语言编写由键盘输入10个4位的数据并将这些数小到大进行排序其结果输出在显示屏上的程序 。