Итак, я работаю над простой игрой на палаче в C, и у меня есть функция read_guess, показанная ниже.
void read_guess(char *guesses, char *p_current_guess)
{
int valid_guess = 0;
// Repeatedly takes input until guess is valid
while (valid_guess == 0)
{
printf(">>> ");
fgets(p_current_guess, 2, stdin);
if (!isalpha(*p_current_guess)) printf("Guesses must be alphabetic. Please try again.\n\n");
else
{
valid_guess = 1;
// Iterates over array of guesses and checks if letter has already been guessed
for (int i = 0; guesses[i] != '\0'; i++)
{
if (guesses[i] == *p_current_guess)
{
printf("You have already guessed this letter. Please try again.\n\n");
valid_guess = 0;
break;
}
}
}
}
}
Я перепробовал все стандартные функции ввода (включая getchar ), но со всеми из них, когда вводится больше, чем один символ, вместо того, чтобы брать только первый символ и двигаться дальше (или спрашивать снова), остальная часть ввода «сдвигается назад», и вводится в следующий раз запрашивается, будь то, потому что входные данные содержали не алфавитный символ c или начинается следующий раунд, остальная часть входных данных обрабатывается автоматически. Это повторяется для каждого символа ввода.
Как мне избежать этого?