2016-02-23 2 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

Передача 'average', тип которого' float', '% d' in'printf()', который вызывает данные с типом 'int', также вызывает * неопределенное поведение *. – MikeCAT

+0

Вы уверены, что второй 'printf()' пропущен? (пропущен возможно из-за неопределенного поведения) Разве это еще не вызвано, потому что первый 'scanf()' ждет символа без пробелов? – MikeCAT

ответ

0

Ваш вложенности цикл был не совсем правильно, ваши scanf звонки будут висеть, вам необходимо preinitialize ab и hits, и ваш окончательный 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^