【问题标题】:The code does not seem to execute properly代码似乎没有正确执行
【发布时间】:2016-11-16 10:29:53
【问题描述】:

卡在 valid = 0 while 循环中,它没有通过 scanf 并不断要求输入。该程序旨在接受 GPA 的整数值,然后计算每个 gpa 在给定值中出现的频率。

#include <stdio.h>

int main(void) {
    int amount, i, count, valid;
    int GPA[200], GPAFreq[4];

    valid = 0;
    i = 1;
    count = 1;

    GPA[1] = 0; GPA[6] = 0;
    GPA[2] = 0; GPA[7] = 0;
    GPA[3] = 0; GPA[8] = 0;
    GPA[4] = 0; GPA[9] = 0;
    GPA[5] = 0; GPA[10] = 0;

    GPAFreq[1] = 0; GPAFreq[3] = 0;
    GPAFreq[2] = 0; GPAFreq[4] = 0;


    printf("Enter the number of students: ");
    scanf("%d", &amount);

    while ( i < (amount + 1))
    {
        i += 1;
        while (valid == 0)
        {
            printf("%d", GPA[i]);
            if ( (GPA[i] == 4) || (GPA[i] == 3) || (GPA[i] == 2) || (GPA[i] == 1) )
            {
                valid = 1;  
            }
            else
            {
                printf("GPA of student # %d is: ", i);
                scanf("%d", &GPA[i]);
            }
        }
        count = 1;
        while (count < 5)
        {
            if (GPA[i] == count)
            {
                GPAFreq[count] +=1;
            }
        }       
    }

    count = 1;
    while (count < 5)
    {
        printf("\nGPA %d --- %d student(s).", count, GPAFreq[count]);
        count += 1;
    }


    return 0;
}

【问题讨论】:

  • 考虑在第三个while循环中增加“count”的值。

标签: c


【解决方案1】:

当我执行此操作时,它不会卡在 while(valid == 0) 循环中,而是卡在第一个 while(count &lt; 5) 中,因为您没有在此循环内增加计数。

我不妨指出这段代码中的其他一些内容。

  • 您可以通过像 int array[10] = {0} 这样的声明来自动将数组的所有元素设置为 0。有几种方法可以做到这一点(包括 for 循环),但您不需要像第 11-18 行那样手动输入每一个

  • 数组在 c 中索引为 0,因此您从 0 开始计数,而不是 1

  • 在 while 循环的开头(第 26 行)在访问 i 之前递增 i。因此意味着实际使用的第一个索引是 2(记住它应该是 0)

  • 如果您将学生人数限制为 200 人,则应确保用户输入的人数不会超过此数量。

编辑:

  • 您还需要在 while(valid == 0) 循环之前将 valid 重置为 0(您也可以这样做 while(!valid) 顺便说一句)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多