【发布时间】:2019-08-01 15:15:24
【问题描述】:
我无法显示学生比较每个科目的最低分数,最高分数可以正常工作。循环执行是否有错误,或者我没有设置正确的参数来搜索最低值的元素,可能是什么原因?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
int roll_no;
int semester_no;
char name[20];
int marks[6];
}semester[100];
int main ()
{
int i=0,n,j=0;
int highest=0,lowest=0;
printf("HOW MANY STUDENTS MARKS TO ENTER?\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("ENTER DETAILS OF STUDENT %d",i+1);
printf("\nROLL NO\n");
scanf("%d",&semester[i].roll_no);
printf("NAME\n");
getchar();
gets(semester[i].name);
printf("SEMESTER\n");
scanf("%d",&semester[i].semester_no);
int maxmarks=semester[0].marks[0];
for (i=0;i<n;i++)
{
for(j=0;j<6;j++)
{
if(semester[i].marks[j]>maxmarks)
{
highest=i;
}
}
}
minmarks=semester[0].marks[0];
for(i=0;i<n;i++)
{
for(j=0;j<6;j++)
{
if(semester[i].marks[j]<minmarks)
{
lowest=i;
}
}
}
// printf("\n%d\n",cl);
// printf("%d\n",ch);
printf("\nNAME OF STUDENT WITH HIGHEST MARKS\n");
printf("%s",semester[highest].name);
printf("\nNAME OF THE STUDENT WITH LOWEST MARKS\n");
printf("%s",semester[lowest].name);
return 0;
}
我尝试了不同的输入,但我得到了错误的输出
HOW MANY STUDENTS MARKS TO ENTER?
2
ENTER DETAILS OF STUDENT 1
ROLL NO
1
NAME
abc
SEMESTER
1
SUBJECT 1 MARKS
10
SUBJECT 2 MARKS
20
SUBJECT 3 MARKS
30
SUBJECT 4 MARKS
40
SUBJECT 5 MARKS
50
ENTER DETAILS OF STUDENT 2
ROLL NO
2
NAME
xyz
SEMESTER
1
SUBJECT 1 MARKS
50
SUBJECT 2 MARKS
60
SUBJECT 3 MARKS
70
SUBJECT 4 MARKS
80
SUBJECT 5 MARKS
90
NAME OF STUDENT WITH HIGHEST MARKS
xyz
NAME OF THE STUDENT WITH LOWEST MARKS
xyz
【问题讨论】:
-
更具描述性的变量名称将对这个问题有很大帮助。这很令人困惑。
-
为了提高代码的可读性,您应该根据变量的用途命名变量。很难猜出 rn、s 和 sn 是干什么用的。你也应该调整你的身份。
-
更小的代码并不是更好的代码。可读性更为重要。
-
@Sujit Maiti 你说的“分数最低的人”是什么意思?是不是意味着这个人的所有分数都应该小于其他人的分数?
-
@Sujit Maiti 您应该提供输入数据和问题所在。和他们一起。
标签: c arrays for-loop struct max