@dyrtage6

Почему показывается 'меню' 2 раза?

Здраствуйте! Начал изучать язык Си для программирование роботов. Решил сделать игру "Виселица", но выходит небольшая проблема. Почему-то меню показывается два раза после того, как я введу что-либо. Не могу понять причину.5f378e41dc312724768890.jpeg

Вот как выглядит тот кусок кода -
void main() {
    char choice;

    printf("Hello! You got into the 'Hangman' game\n");
    while (choice != '0') {
        printf("\n0. Exit\n1. Phone brands\n2. Programming languages\n3. Kinds of sports\n");
        printf("Enter what you want to guess: ");
        scanf("%c", &choice);

        if (choice == '0') {
            printf("\nGoodBye...");
            break;
        } else if (choice == '1') 
            printf(SevenAttempt);
    }
}
  • Вопрос задан
  • 128 просмотров
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Почему-то меню показывается два раза после того, как я введу что-либо.
scanf("%c", &choice);

Потому что вот этот scanf читает единственный символ из потока ввода, а чтобы ввести, например, 1, нужно нажать '1', а за ней следом 'enter'. '1' останется сама собой и будет прочитана первым scanf, а 'enter' превратится в '\n' и будет прочитан вторым scanf.
Чтобы этого избежать можно читать так:
scanf(" %c%*[^\n]", &choice);
Пробел перед %c проглотит все пробельные символы, %*[^\n] проглотит хвост строки после первого прочитанного не-пробельного символа.
Ответ написан
Это происходит из-за того, что scanf считывает перенос строки. Чтобы его пропускать, поставьте в начало строки формата пробел:
scanf(" %c", &choice);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы