2016-02-23 23 views
1

目標是根據統一編號爲不同玩家分配平均值。問題在於它不斷跳過第二個printf,並且switch語句中的字符不起作用。我敢肯定,這是我的一個非常簡單的錯誤,但我似乎無法找到它。遇到了嵌套的循環問題

int main(){ 
float ab; 
float hits; 
int un; 
char pa; 
printf("Please enter the player number, or -1 to exit. \n"); 
scanf("%d%*c \n", &un); 
while(un!= -1) 
{ 
    printf("Please enter either an H for a hit or an O for a out, enter E to stop. \n"); 
    scanf("%c%*c", &pa); 
    while(pa != 'E') 
    { 
      switch (pa) 
      { 
      case 'h': 
      case 'H': 
       ab += 1; 
       hits +=1; 
       break; 

      case 'o': 
      case 'O': 
       ab+=1; 
       break; 

      default: 
       printf("Error: Please insert an O or H \n"); 
       break; 
      } 
     float average = (ab/hits); 
     printf("Player %d's score is equal to: %d \n", un, average); 

     printf("Please enter the player number, or -1 to exit. \n"); 

     scanf("%d%*c \n", &un); 
    } 

} 
return 0; 
} 
+0

使用未初始化變量的值'ab'和'hits',它具有自動存儲時間,調用*未定義行爲*。 – MikeCAT

+0

在'printf()'中,將類型爲「float」的'average'傳遞給'%d',調用類型爲int的數據,也會調用未定義的行爲。 – MikeCAT

+0

你確定第二個'printf()'被跳過嗎? (由於未定義的行爲,可能會跳過)是不是因爲第一個'scanf()正在等待非空白字符而尚未調用? – MikeCAT

回答

0

你的循環嵌套是不完全正確,你scanf通話將掛起,您需要預初始化abhits,並最終printf有一個不正確的格式。

下面是更正後的代碼[請原諒無償風格清理]:

#include <stdio.h> 

int 
main() 
{ 
    float ab; 
    float hits; 
    int un; 
    char pa; 

    while (1) { 
     printf("Please enter the player number, or -1 to exit.\n"); 
#if 0 
     scanf("%d%*c \n", &un); 
#else 
     scanf(" %d", &un); 
#endif 
     if (un == -1) 
      break; 

     ab = 0; 
     hits = 0; 

     printf("Please enter either an H for a hit or an O for a out, enter E to stop.\n"); 
     while (1) { 
#if 0 
      scanf("%c%*c", &pa); 
#else 
      scanf(" %c", &pa); 
#endif 
      if ((pa == 'E') || (pa == 'e')) 
       break; 

      switch (pa) { 
      case 'h': 
      case 'H': 
       ab += 1; 
       hits += 1; 
       break; 

      case 'o': 
      case 'O': 
       ab += 1; 
       break; 

      default: 
       printf("Error: Please insert an O or H\n"); 
       break; 
      } 
     } 

     float average = (ab/hits); 

#if 0 
     printf("Player %d's score is equal to: %d\n", un, average); 
#else 
     printf("Player %d's score is equal to: %g\n", un, average); 
#endif 
    } 

    return 0; 
}