C: как читать много строк из стандартного ввода - PullRequest
0 голосов
/ 01 сентября 2018

Мне нужно прочитать много строк с переменной длиной от стандартного ввода до EOF. Строки состоят из последовательных символов, не разделенных пробелами, и длина строк не максимальная.

Использование:

char st[101];
while(scanf("%100s",st) != EOF){ //divide the input into parts of 100 chars
    int i;
    for(i=0; i<strlen(st);i++){
        printf("%c",st[i]);
    }
}

Я не могу сказать, является ли текущая строка частью предыдущей или новой, потому что она напечатана в одной строке (и я понятия не имею, где печатать "\ n").

Пример ввода :

aaaaaaaaa[...]aaaaa

bbbbbbbbb[...]bbbbb

выход

aaaa[...]aabbbbbb[...]bbbb

Есть решение?

P.S. Использование getchar() Я не могу справиться с EOF.

1 Ответ

0 голосов
/ 01 сентября 2018

Вот как вы справляетесь EOF с getchar:

int c;
while ((c = getchar()) != EOF) {
    putchar(c);
}

Этот код будет копировать свой ввод на стандартный вывод.

Если вы хотите работать с целыми строками одновременно, самый простой способ - использовать getline, если он у вас есть (это POSIX, а не стандартный C):

char *line = NULL;
size_t size = 0;

ssize_t nread;
while ((nread = getline(&line, &size, stdin)) != -1) {
    // nread characters were read
    do_stuff_with(line);
}
free(line);

Если у вас нет getline, вы можете написать свой собственный (используя getchar и realloc).

...