2013-10-28 2 views
1

Так что я пытаюсь спросить пользователя, хотят ли они повторить мою программу, и я получаю странный результат то и дело. Это происходит не каждый раз, и я не мог понять, что вызывает его.ошибка повторения функции программы в C, scanf связана?

Мне кажется, что он присваивает «возврат» после ввода «q» в repeatProgram вместо «q», но у меня нет идеи, почему.

Выход, когда он работает:

для выхода введите д, чтобы продолжить вводить у.
s
Вы вошли в s, это недействительный вариант.

Выходной сигнал, когда он терпит неудачу:

для выхода введите д, чтобы продолжить вводить у.
д
вы вошли
, что не является допустимым вариантом.

Код:

char RepeatProgramPrompt() 
{ 
    char repeatProgram; 

    do 
    { 
     printf("\nTo exit enter q, to continue enter y.\n"); 
     scanf("%c%*c", &repeatProgram); 

     repeatProgram = tolower(repeatProgram); 

     if(repeatProgram != 'y' && repeatProgram != 'q') 
     { 
      printf("\nYou've entered %c, that isn't a valid option.\n", repeatProgram); 

     } 

    }while(repeatProgram != 'y' && repeatProgram != 'q'); 


    return(repeatProgram); 
} 

Так что мой вопрос, почему это происходит? он отлично справится с кучей попыток, а затем просто потерпит неудачу.

Извините, если я отформатировал это неправильно, это мой первый пост.

ответ

0

Эта проблема возникает из-за того, что ваш scanf читает \n после вашего первого ввода. Чтобы избежать этого, изменить ваши scanf заявление следующим образом:

scanf("%c", &repeatProgram); 
getchar(); // this will remove the excess '\n' 

Выход:

[email protected] ~ 
$ ./test 

To exit enter q, to continue enter y. 
d 

You've entered d, that isn't a valid option. 

To exit enter q, to continue enter y. 
s 

You've entered s, that isn't a valid option. 

To exit enter q, to continue enter y. 
d 

You've entered d, that isn't a valid option. 

To exit enter q, to continue enter y. 
q 

[email protected] ~ 
$ 
+0

Так просто, спасибо. – user2926952

0

съедать завершающие пробельные символы с новой строки после зсапЕ и он должен работать:

scanf("%c", &repeatProgram); 
while(getchar() != '\n') 
{ 
    //do nothing 
} 

Sample output.

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