Как я могу контролировать поведение scanf, когда ему нужно значение типа int, но передается символ? - PullRequest
0 голосов
/ 11 апреля 2020

Я делаю небольшой проект (ti c ta c toe), и у меня есть функция, которая управляет игровыми режимами на основе ввода игрока. Теперь предположим, что игрок вставляет символ вместо трех допустимых значений (0,1,2). Теперь, если игрок передает персонажа, значение по умолчанию не изменяется, поэтому l oop становится бесконечным. Поэтому я попытался создать значение readedCharac, которое хранит количество символов, прочитанных из scanf, но это не решает проблему. Что мне не хватает? Спасибо за ваши awnsers

    int playerChoice = -1;
    int readedCharac = 0;

    printf("\n\nWELCOME TO TIC-TAC-TOE GAME\n\n");
    mainMenu();
    readedCharac = scanf("%d",&playerChoice);

    while((playerChoice < 0 || playerChoice > 2) && readedCharac == 0 )
    {
        printf("\nInvelid Entry Retry \n");
        scanf("%d",&playerChoice);
    }

1 Ответ

1 голос
/ 11 апреля 2020

Это происходит из-за того, что буфер scanf все еще ищет целое число и поэтому не доступен. Вы можете очистить буфер:

int playerChoice = -1;
int readedCharac = 0;

printf("\n\nWELCOME TO TIC-TAC-TOE GAME\n\n");
mainMenu();
readedCharac = scanf("%d",&playerChoice);

while((playerChoice < 0 || playerChoice > 2) && readedCharac == 0 )
{
    while(getchar()!='\n');
    printf("\nInvelid Entry Retry \n");
    scanf("%d",&playerChoice); 
}
...