2010-12-05 3 views
2

Можно создать дубликат:
How do you allow spaces to be entered using scanf?C зсапЕ с проблемой пространства

Е ("пожалуйста ключ в название книги \ п"); scanf ("% s", bookname);

я внутри данных, как это: - C Программирование

но почему выводить данные, как это: - C

теряют программирование (строк)?

почему

спасибо.

+0

Что такое `bookname`? – khachik 2010-12-05 10:42:56

ответ

4

Использование fgets() вместо scanf()

+2

Это не отвечает на вопрос, «почему». – caf 2010-12-06 00:40:25

+0

спасибо! он работает – user531119 2010-12-06 01:56:35

0

Ну bookname угрюмого какое-то полукокс ;-) точки является то, что scanf в этом виде остановке на первый символ пробела.

Вы можете использовать другую строку формата, но в этом случае, вероятно, следует использовать fgets.

scanf действительно следует использовать для «форматированного» ввода.

18

Спецификатор преобразования %s вызывает scanf, чтобы остановиться при первом символе пробега. Если вам нужно, чтобы иметь возможность читать пробельные символы, вам нужно будет либо использовать спецификатор %[ преобразования, такие как

scanf("%[^\n]", bookname); 

, который будет читать все до следующего символа новой строки и сохранить его в bookname, хотя бы safe вы должны указать максимальную длину имени книги в спецификаторе преобразования; например если BookName имеет место для 30 символов, считая нулевой терминатор, вы должны написать

scanf("%29[^\n]", bookname); 

В противном случае, вы могли бы использовать fgets():

fgets(bookname, sizeof bookname, stdin); 

Я предпочитаю fgets() решение, лично.