Я пишу программу, которая должна читать две строки, которые могут содержать разрывы строк и различные другие символы. Поэтому я использую EOF (Ctrl-Z или Ctrl-D) для завершения строки.
Это прекрасно работает с первой переменной, но со второй переменной, однако, это кажется проблематичным, поскольку очевидно, что что-то застряло во входном буфере, и пользователь ничего не набирает.
Я попытался очистить буфер с помощью while (getchar() != '\n');
и нескольких похожих вариантов, но, похоже, ничего не помогло. Все попытки очистки привели к бесконечному циклу, и без очистки добавление второй переменной невозможно.
Символы для обеих переменных читаются в цикле следующим образом: while((c = getchar()) != EOF)
, что предполагает, что это EOF, что я застрял в моем буфере. Или это как-то влияет на поведение программы? Что-то не так с используемой логикой?
Я начинаю чувствовать себя немного отчаянным после нескольких часов борьбы с этим.
[править: код добавлен ниже]
[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 может быть неправильной функцией, или я пытаюсь ошибиться. Предположим, что это даже возможно.