Игнорит fgets() - C (СИ)

Узнай цену своей работы

Формулировка задачи:

void answ(){
    printf("Your answer: ");
    char temp_answer[100];
    fgets(temp_answer, sizeof(temp_answer), stdin);
    int size_of_answer=strlen(temp_answer);
    if (size_of_answer==2){
    if((temp_answer[0]=='1'||temp_answer[0]=='2'||temp_answer[0]=='3')){
        printf("\n");
            strcpy(answer, temp_answer);}
        else{
    printf("Your answer is invalid. Try again!\n");
        return answ();
    }}
 
else{
    printf("Your answer is invalid. Try again!\n");
        return answ();
    }
}
Мне нужно, чтобы ответ был 1, 2 или 3, в противном случае - трайэгенить. Проблема в том, что все хорошо работает один раз, но в программе может быть неоднократное использование этой штучки, а на второй раз высвечивается сразу трайэген. Помогите упростить это все, а то мне кажется, что изобретаю велосипед)))) Нужно, чтобы fgets один раз не пропускало, пробовал поставить getchar(); после fgets-a, но не помогло( P.S. answer - глобальная, которую использую в мэйне.

Решение задачи: «Игнорит fgets()»

textual
Листинг программы
if (scanf("%32d%c", ¶m, &bufStub) <= 0 || bufStub != '\n')
{
  // Error

Объяснение кода листинга программы

  1. Входные данные: param, bufStub
  2. Используется функция scanf() для чтения входных данных
  3. Формат чтения: %32d%c
    • %32d - чтение целочисленного значения, максимальное количество цифр - 32
    • %c - чтение символа, в данном случае - новой строки (\n)
  4. Результат чтения сохраняется в переменной param (целочисленное значение) и bufStub (символ)
  5. Проверка на успешное чтение: если функция scanf() вернула значение меньше или равное нулю, или символ в bufStub не равен новой строке (\n), то выполняется блок кода, помеченный как // Error

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5