Сканировать строку, включая пробелы в C

В моем коде:

scanf("%s", &text);
printf("%s\n", text);

Вход:

hi how are you

Выход:

hi

и нет

hi how are you

что я могу сделать, чтобы исправить это?


person Gal    schedule 24.11.2010    source источник


Ответы (3)


Посмотрите на fgets.

Функция fgets() считывает максимум на один символ меньше числа, указанного параметром n, из заданного потока и сохраняет их в строке s. Чтение останавливается, когда найден символ новой строки, конец файла или ошибка. Новая строка, если она есть, сохраняется. Если прочитаны какие-либо символы и ошибки нет, в конец строки добавляется символ `\0'.

person The Archetypal Paul    schedule 24.11.2010

Я полагаю, вы ищете

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

Который будет читаться до разделителя новой строки. Или если вы используете какой-то другой разделитель

ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
person falstro    schedule 24.11.2010
comment
Только в Linux или других системах, использующих GNU libc. И getline(), и getdelim() являются расширениями GNU. Они доступны начиная с libc 4.6.27. (linux.die.net/man/3/getline) - person The Archetypal Paul; 24.11.2010
comment
@Павел; Раньше это было расширение GNU, да, в настоящее время оно является частью POSIX.1-2008. - person falstro; 24.11.2010
comment
Благодарю. Мне нужно прочитать об этом - насколько широко это реализовано? - person The Archetypal Paul; 24.11.2010

Используйте fgets, чтобы получить информацию:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    char text[80];
    fgets(text, sizeof(text), stdin);
    printf("%s\n", text);
}
person GreenMatt    schedule 24.11.2010