Проблема с EOF в C

Я пишу программу, которая должна читать две строки, которые могут содержать разрывы строк и различные другие символы. Поэтому я использую EOF (Ctrl-Z или Ctrl-D), чтобы завершить строку.

Это прекрасно работает с первой переменной, но со второй переменной, однако, это кажется проблематичным, поскольку очевидно, что что-то застряло во входном буфере, и пользователь не может ничего вводить.

Я пытался очистить буфер сwhile (getchar() != '\n'); и несколько похожих вариантов, но, похоже, ничто не поможет. Все попытки очистки привели к бесконечному циклу, и без очистки добавление второй переменной невозможно.

Символы для обеих переменных читаются в цикле следующим образом:while((c = getchar()) != EOF), что предполагает, что это EOF, что я застрял в моем буфере. Или это как-то влияет на поведение программы? Что-то не так с логикой, которую я использую?

Я начинаю чувствовать себя немного отчаянным после нескольких часов борьбы с этим.

[edit: добавлен код ниже]

[edit 2: clearerr (), кажется, заставляет это решение EOF работать в конце концов.

Кажется, он работает в своем первоначальном виде, как я и предполагал под Linux, я пробовал это вчера с Windows.]

код:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int x = 0;
    int c;
    char a[100];
    char b[100];

    printf("Enter a: ");
    while((c = getchar()) != EOF)
    {
        a[x] = c;
        x++;
    }
    a[x] = '\0';
    x = 0;

    /*while (getchar() != '\n'); - the non-working loop*/

    printf("\nEnter b: ");
    while((c = getchar()) != EOF)
    {
        b[x] = c;
        x++;
    }
    b[x] = '\0';

    printf("\n\nResults:\na: %s\n", a);
    printf("b: %s\n", b);

    return(0);
}

[править 3:]

Динамическая проблема с памятью:

Моя программа также должна обрабатывать строки длиной более 100 символов. Первоначально я намеревался решить эту проблему путем динамического выделения памяти, но когда у меня возникли проблемы с бесконечным циклом, описанным выше, и сбоями, связанными с памятью, я оставил его и переключился на char [100].

Я думаю, что я пытался, как правило, что-то вроде этого:

while((c = getchar()) != EOF)
{
  a = malloc(sizeof(char));
  a[x] = c;
  x++;
}

Это возможный (или разумный) способ сделать это? Я пытаюсь выделить больше памяти для каждого персонажа, который там обрабатывается. Индивидуально. С таким кодом (этот пример содержит, вероятно, синтаксические ошибки) у меня возникли сбои, поэтому мне кажется, что malloc может быть неправильной функцией, или я пытаюсь ошибиться. Предположим, это даже возможно.

Ответы на вопрос(7)

Ваш ответ на вопрос