2016-01-15 3 views
2

Я пытаюсь создать программу, которая просит пользователя выбрать, на какой стадии он будет играть, а затем программа спрашивает его, хочет ли он снова играть или нет, и по какой-то причине если пользователь вводит «y» - программа повторяется сама, но без запуска функции «этапы».Программа повторяется сама проблема

int main() 
{ 
    while (again == 'y') 
    { 

     getStage(); 
    } 

    if (again == 'n') 
    { 
     printf("BYE BYE!"); 
    } 

    system("PAUSE"); 
} 

/* 
    Function "getStage"- 
     - gets a choice from the user about the stage he wants to play on 
      and checks if the choice is proper. 
     - Transfers the program to the "randCode" function to make secret code. 
     - Transfers the program to the "stages" function 
*/ 

void getStage() 
{ 

    choice= 0; 

    do 
    { 
     printf("What stage would you like to choose? Choose Wisely: "); 
     scanf("%d", &choice); 
     fflush(stdin); 
     system("COLOR 07"); 
    } while(choice < 1 || choice > 4); 

    randCode(); 

    stages(choice); 

    printf("Whould you like to play again? (y/n): "); 
    scanf("%c", &again); 

} 
+3

'fflush (stdin);' undefined behavior. –

+1

Это 'fflush (stdin);' undefined behavior и просто добавьте пробел перед '% c' в спецификаторе формата. –

+0

Вы должны добавить return 0 в конец main, а main сам должен быть объявлен как int main (void) –

ответ

4

В вашем коде функции getStage(), вам необходимо изменить

scanf("%c", &again); 

в

scanf(" %c", &again); 
     ^^ // note the space here 

к пропустить символ новой строки, присутствующие в буфере ввода.

Для разработки, при вводе ввода и нажмите ENTER , он сохраняет вход с последующим символом новой строки, вызванными ENTER ключа.

В следующей итерации, что newline присутствует во входном буфере servs как вход к следующему %c спецификатора формата, который делает scanf(), чтобы пропустить шаг.

Это говорит,

  1. fflush(stdin) является undefined behavior. Избавиться от этого.
  2. int main() должно быть int main(void) хотя бы соответствовать стандарту.
+0

Но без fflush (stdin) цикл просто бесконечен – Nathan1982

+0

@ Nathan1982 и почему? –

+0

Я не знаю, но без него он просто печатает «Какую сцену вы хотели бы выбрать? Выберите« Умственно: », не останавливаясь. – Nathan1982

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