2016-11-16 76 views
0

获取卡在有效= 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; 
} 
+0

考虑增加 “数” 的价值第三个while循环。 –

回答

1

当我执行这并不粘在while(valid == 0)循环得到,它陷在第一while(count < 5),因为你不增加这个循环中计数。

在这段代码中,我还有其他一些东西可以立即弹出来,我不妨指出。

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

  • 您可以在访问前在while循环(第26行)的开始处增加i。这意味着实际使用的第一个索引是2(请记住它应该是0)

  • 如果您将学生人数限制为200,则应确保用户不输入大于此值的数字。

编辑:

  • 您还需要while(valid == 0)循环之前重置valid为0(你也可以只是做while(!valid) BTW)