for循环只执行一个循环

时间:2012-11-09 18:33:44

标签: c for-loop initialization

我需要制作一个C程序来阅读课堂上的学生人数(1<=students<=25),并让每个学生阅读他的考试成绩10/20 15/20等({{ 1}})并打印学生的最高和最高分以及课程的平均分数。

我制作了该程序,但由于某种原因它只执行1<=score<=20循环。

你能帮我理解为什么吗?

这是代码:

for

4 个答案:

答案 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