2016-11-16 78 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)