-3

Почему при выполнении моей программы игнорируется считывение полинома-B? (строка 3) И как это можно исправить?

        case (SUM):
            puts("Enter polynom B: ");
            fgets(str_2, 255, stdin);

            rc = get_polynom(str_2, &lst_2);
            //print_list(lst_2);
            puts("");

            polynom_addiction(&lst, &lst_2, &res_list);
            print_list(res_list);


            break;

        case (DVD):
            break;
    }

Начало main:

int main()
{
    int rc = OK;
    char choice[255];
    char str[255];
    char str_2[255];
    node_t *lst = NULL;
    node_t *lst_2 = NULL;
    node_t *res_list = NULL;

    double a;

    puts("Enter polynom: ");
    fgets(str, 255, stdin);

    rc = get_polynom(str, &lst);

    print_list(lst);

    puts("CHOSE THE ACTION: val; ddx; sum; dvd");
    fgets(choice, 4, stdin);

garin
  • 159
  • Что считывается (и главное - как) перед этим? Есть у меня подозрение, что у вас вот эта проблема, но надо все же посмотреть, что у вас и как... – Harry Dec 06 '19 at 17:10
  • перед эти аналогичным образом считывается полином-А. Успешно считывается. – garin Dec 06 '19 at 17:11
  • "Имя, сесга, имя!" (с) Приведите код, входные данные - чтоб можно было воспроизвести вашу проблему. – Harry Dec 06 '19 at 17:12
  • Входные данные могут быть любые. (Любая строка). Насколько я понимаю, проблема с fgets. (Код привел) – garin Dec 06 '19 at 17:14
  • 1
    Еще скажите, что компилятор лагает... Проблема в программе, скорее всего в другом месте. Вобщем, без конкретного кода говорить не о чем. – Harry Dec 06 '19 at 17:16
  • Что значит "код привел"? Откуда выдран первый кусок кода? Какое он имеет отношение ко второму куску кода? – AnT stands with Russia Dec 06 '19 at 17:23
  • это начало main, если приглядитесь. какой код вам еще нужен? в программе 600 строк. – garin Dec 06 '19 at 17:24

1 Answers1

1

Классическая проблема с \n, оставшимся сидеть во входном потоке. Чтение ACTION:

puts("CHOSE THE ACTION: val; ddx; sum; dvd");
fgets(choice, 4, stdin);

Пользователь введет, например, sum\n. Такой вызов fgets с лимитом в 4 считает только три символа sum, а \n останется сидеть во входном потоке. Именно этот \n и будет прочитан следующим fgets. Это будет внешне выглядеть так, как будто он игнорируется.

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

char choice[255];
...
puts("CHOSE THE ACTION: val; ddx; sum; dvd");
fgets(choice, sizeof choice, stdin);
choice[strcspn(choice, "\n")] = '\0';