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

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

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

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

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

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

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

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

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

код:

#include 
#include 

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)

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