我需要制作一个C程序来阅读课堂上的学生人数(1<=students<=25
),并让每个学生阅读他的考试成绩10/20
15/20
等({{ 1}})并打印学生的最高和最高分以及课程的平均分数。
我制作了该程序,但由于某种原因它只执行1<=score<=20
循环。
你能帮我理解为什么吗?
这是代码:
for
答案 0 :(得分:1)
未初始化m
并使用while
条件
在{conditon
中使用未初始化的局部变量undefined behaviour
想要实现相同的
使用
do
{
printf("give number of students ");
scanf("%d",&m);
}
while(m<1 || m>25);
for (i=1; i<(m+1); i++)
将条件更改为i<=m
这是一项很好的技巧,而不是<
,然后添加1
在此循环内使用相同的do while
循环
答案 1 :(得分:1)
首先 - 初始化变量:
int m,i,b,sum,min,max,mo; // these are declared and uninitialized
m = 0; // now it's initialized to 0
i = 0;
...
如果你没有将它们初始化为某种东西,你就不知道它们是从什么开始的。
第二 - 您需要更改b
:
for (i=1; i<(m+1); i++) {
while (b<1 || b>20) { <-- here you're checking for b being valid
printf("give score of %d student",i);
scanf("%d",&b);
}
因此,b中的第一次将在1到20之间,如果你没有将它重置为无效的东西,你将永远不会再来这里。记录b:
的值后 sum=sum+b;
b = 0; // we're done with b for now, set it to something invalid for the while()
}
答案 2 :(得分:1)
您忘记初始化B
变量,因此它循环m次,从不要求您插入分数!
答案 3 :(得分:1)
1。您在此初始化'm',没有任何先前值
int m,i,b,sum,min,max,mo;
2. 如果没有值,请检查此情况。这意味着,将使用垃圾值。 (五月/五月不符合您的条件)
while (m<1 || m>25) {
3. m的关键scanf在前一个时间内。没有它你的FOR将运行基本i = 1并停止。
for (i=1; i<(m+1); i++) {
您需要了解C中的垃圾值以及在使用之前将变量初始化为初始值的重要步骤。
您可以在此链接上阅读更多内容: What is a garbage value/How does it occur in C