2016-05-25 5 views
1

У меня есть небольшая проблема при выполнении упражнения, чтобы узнать C. Проблема в следующем: мне нужно прочитать строку от пользователя, но если он просто набирает текст пространство, мне нужно распечатать пробел. Все в порядке. Но когда я ввожу пробел во время работы программы, он не понимает его как строку и продолжает ждать, пока я наберу другие вещи.C - Как читать строку с пробелами с помощью scanf

Я использую scanf("%[^\n]", string_name_here);

Я ценю вашу помощь, и имеют хороший день! o/ И извините за мой плохой английский, надеюсь, вы это поймете :)

+0

толчок войти, потому что 'stdin' является bufferd поток. или добавить ограничение, подобное этому ''% 10 [^ \ n] "' – BLUEPIXY

+3

Прекратить использование scanf. Если вы хотите изучить C, прочитайте ввод с помощью 'fgetc',' fread', 'fgets' и' read'. (Может быть, несколько других). –

+2

И разумный аргумент может быть сделан, чтобы избежать «чтения» –

ответ

1

Использование char *fgets(char *str, int n, FILE *stream) сделает ваш день.

По словам человека:

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

Пример программы

#include <stdio.h> 
#define MAXSTR 21 

int main(void) 
{ 
char my_str[MAXSTR] = {'\0'}; 

fgets(my_str, MAXSTR, stdin); 

return 0; 
} 

Входной сигнал:

Клаудио Кортезе

Выход:

Клаудио Кортезе