2015-09-15 69 views
0

因此,我遇到以下代碼的問題,並且在編譯時遇到運行時錯誤。基本上,這是一個程序,輸入不確定數量的學生和每個學生未確定的測試分數,然後計算每個學生的GPA並將其顯示回給用戶。我使用的樣品輸入如下: 約翰尼 一個 乙C中的Char問題

#include <stdio.h> 

int main(void) 
{ 
    char StudentName[50]; 
    char UserInput; 
    int GradeSum; 
    int TotalGrades; 
    float GPA; 
    int Test; 
    int Try; 

    Test = 0; 

    while (Test != 1) 
    { 
     printf ("Enter the student’s name...\n"); 
     scanf ("%49s", StudentName); 
     Try = strcmp(StudentName, ""); 
     if (Try != 0) 
     { 
      GradeSum = 0; 
      TotalGrades = 0; 
      GPA = 0; 

      while (Test != 1) 
      { 
       printf ("Enter the student’s letter grade...\n"); 
       scanf (" %c", &UserInput); 
       if ((UserInput == 'A') || (UserInput == 'B') || (UserInput == 'C') || (UserInput == 'D') || (UserInput == 'F')) 
       { 
        if (UserInput == 'A') 
        { 
         GradeSum += 4; 
         TotalGrades += 1; 
        }  
        else if (UserInput == 'B') 
        { 
         GradeSum += 3; 
         TotalGrades += 1; 
        }   
        else if (UserInput == 'C') 
        { 
         GradeSum += 2; 
         TotalGrades += 1; 
        }   
        else if (UserInput == 'D') 
        { 
         GradeSum += 1; 
         TotalGrades += 1; 
        }   
        else if (UserInput == 'F') 
        { 
         TotalGrades += 1; 
        } 
       } 
       else 
       { 
        printf ("That is not a valid letter grade...\n"); 
       } 
      } 
      GPA = ((float)GradeSum)/TotalGrades; 
      printf ("%s: %f\n", StudentName, GPA); 
     } 
     else 
     { 
      break; 
     } 
    } 
    return 0; 
} 

編輯:我做了建議我調整,我仍然得到一個運行時錯誤和輸出如下所示:

Enter the student’s name... 
Enter the student’s letter grade... 
Enter the student’s letter grade... 
Enter the student’s letter grade... 
Enter the student’s letter grade... 
Enter the student’s letter grade... 
Enter the student’s letter grade... 

它只是一直走下去,這樣的...

+0

什麼是錯誤? – tonysdg

+0

它只是說「運行時錯誤」,並沒有提供任何細節 – PorkchopDonut

+1

假設你使用GCC,用'-Wall'和'-Wextra'編譯。除了Sourav Ghosh的建議外,就是這樣。 – tonysdg

回答

1

首先,而非

scanf ("%s", &StudentName); 

加入

scanf ("%49s", StudentName); 

就足夠了。

然後,使用==運算符不能比較數組的內容。您需要爲此使用strcmp()

之後,改變

scanf ("%c", &UserInput); 

scanf (" %c", &UserInput); 

,以避免預先存儲的換行符。

最後,執行浮點除法,你可以使用一個演員,就像

GPA = ((float)GradeSum)/TotalGrades; 
+0

我感謝您的快速響應。至於使用strcmp,我可以用;如果(var!= 0)...>? – PorkchopDonut

+0

@PorkchopDonut我不這麼認爲,'strcmp'需要字符串,而你的變量是一個字符。 – ameyCU

+0

@PorkchopDonut [這可能會幫助您在未來更好地在註釋中設置您的代碼格式。](http://stackoverflow.com/editing-help#comment-formatting)該頁面還包含更多用於問題/答案的編輯幫助,其中允許更多的格式。 :-) –

0

的編輯內容,解決了這個問題對我來說,根本沒有運行時錯誤....

Enter the studentÆs name... 
Jane 
Enter the student's letter grade... 
A 
Enter the student's letter grade... 
B 
Enter the student's letter grade... 
A 
Enter the student's letter grade... 
A 
Enter the student's letter grade... 
A 
Enter the student's letter grade... 
1 
That is not a valid letter grade... 
Jane: 3.800000 
Enter the student's name... 

代碼我跑了....

#include <stdio.h> 

int main(void) 
{ 
    char StudentName[50]; 
    char UserInput; 
    int GradeSum; 
    int TotalGrades; 
    float GPA; 
    int Test; 
    int Try; 

    Test = 0; 

    while (Test != 1) 
    { 
     printf ("Enter the student’s name...\n"); 
     scanf ("%49s", StudentName); 
     Try = strcmp(StudentName, ""); 
     if (Try != 0) 
     { 
      GradeSum = 0; 
      TotalGrades = 0; 
      GPA = 0; 

      while (Test != 1) 
      { 
       printf ("Enter the student’s letter grade...\n"); 
       scanf (" %c", &UserInput); 
       if ((UserInput == 'A') || (UserInput == 'B') || (UserInput == 'C') || (UserInput == 'D') || (UserInput == 'F')) 
       { 
        if (UserInput == 'A') 
        { 
         GradeSum += 4; 
         TotalGrades += 1; 
        } 
        else if (UserInput == 'B') 
        { 
         GradeSum += 3; 
         TotalGrades += 1; 
        } 
        else if (UserInput == 'C') 
        { 
         GradeSum += 2; 
         TotalGrades += 1; 
        } 
        else if (UserInput == 'D') 
        { 
         GradeSum += 1; 
         TotalGrades += 1; 
        } 
        else if (UserInput == 'F') 
        { 
         TotalGrades += 1; 
        } 
       } 
       else 
       { 
        printf ("\nThat is not a valid letter grade...\n"); 
        break; 
       } 
      } 
      GPA = ((float)GradeSum)/TotalGrades; 
      printf ("\n\n%s: %f\n", StudentName, GPA); 
     } 
     else 
     { 
      break; 
     } 
    } 
    return 0; 
} 
0

你從來沒有真正測試設置的值,所以它會在一個無限循環中運行。

0

有一些語法錯誤,但我最大的問題是我使用的在線編譯器。將代碼插入到另一個代碼中,以便我可以實時輸入數據,並且工作得很好。活到老,學到老。