Я хочу прочитать переменное количество строк в C, используя функцию
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
.Поэтому я придумал следующий код:
int main() {
int number;
char *line;
size_t len;
scanf("%d", &number);
for (int i = 0; i < number; ++i) {
line = NULL;
getline(&line, &len, stdin);
printf("%s", line);
}
}
Проблема с приведенным выше кодом состоит в том, что первый вызов getline читает символ новой строки ('\n'
), который следует за введенным номером вместопервая строкаДобавление одной из следующих строк кода (обозначается OPTION 1 resp. OPTION 2
) устраняет проблему:
int main() {
int number;
char *line;
size_t len;
scanf("%d", &number);
// fflush(stdin); /* OPTION 1 */
for (int i = 0; i < number; ++i) {
line = NULL;
getline(&line, &len, stdin);
// while (*line == '\n') getline(&line, &len, stdin); /* OPTION 2 */
printf("%s", line);
}
}
Мои вопросы:
Добавляется одна изэти строки (OPTION 1, OPTION 2
) правильный способ сделать это?
Если так, какой из них предпочтительнее другого?
Если нет, какой будет правильный путь?