многострочный ввод чтение ввода из стандартного ввода в C - PullRequest
1 голос
/ 10 октября 2011

Привет всем, кого я хочу спросить, есть ли способ программирования на c, с помощью которого я могу читать многострочный ввод из stdin

, поскольку я не могу использовать scanf (), также не fgets, так как он принимает данные до / n

а также как остановить ввод, как некоторый разделитель

Большое спасибо

также я не использую c ++

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Я рекомендую вам читать ввод по одному символу за раз с помощью getc, искать нужный разделитель и добавлять символы без разделителя в буфер, размер которого вы контролируете вручную (с помощью realloc). Альтернативой является чтение больших блоков с помощью fread и поиск разделителей, но подход getc, вероятно, будет проще и проще.

Обязательно ищите EOF и ваши явные разделители.

1 голос
/ 10 октября 2011

Использовать fread.

например, скопировано со ссылки

#include <stdio.h>
...
size_t bytes_read;
char buf[100];
FILE *fp;
...
bytes_read = fread(buf, sizeof(buf), 1, fp);
...
0 голосов
/ 10 октября 2011

Эта задача была бы довольно простой, если бы в C был правильный тип данных строки с автоматическим управлением памятью.Идея такова:

string s = str_new();
const char *delimiter = "EOF\n";
while (true) {
  int c = fgetc(f);
  if (c == EOF) {
    break;
  }
  str_appendc(s, c);
  if (str_endswith(s, delimiter)) {
    str_setlen(s, str_len(s) - strlen(delimiter));
    break;
  }
}

Вам просто нужно написать правильные функции для обработки строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...