2015-04-09 2 views
0

Я хочу сделать массив символов и хранить весь вход в него (даже если вход содержит «\ п» в какой-то момент, когда я использую:.fgets включить текст после символа новой строки

char vhod[50]; 

fgets(vhod, sizeof(vhod), stdin); 

его магазины вход пОКА первый символ новой строки Как получить весь текст в этом массиве (в том числе текста после новой строки) примера:.. , если мой текст не является:

Hello I need new keyboard. 
This is not good. 

моего массив будет содержать только "Hello I need new keyboard." Я хочу быть в состоянии читать все до конца ввода a < input-1 Я не могу использовать функции открытия/закрытия/чтения FILE, так как он вводится с клавиатуры.

+2

Что заставляет вас думать, что вы не можете использовать 'read()', когда вход с клавиатуры? – Barmar

+0

Вам не нужно вызывать 'open()', поскольку стандартный ввод уже открыт. – Barmar

+1

Если вы используете стандартную библиотеку ввода-вывода, то 'fread()' является очевидным выбором, а не функцией дескриптора файла 'read()'. Конечно, вам нужно быть осторожным, чтобы не переполнять буфер; 50 символов довольно малы. Или вы можете использовать 'fgets()' постепенно; или вы можете рассмотреть функцию POSIX ['getdelim()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/getdelim.html) (близкий родственник 'getline()'), передавая символ такой как '' \ 0'' в качестве «разделителя строк», поэтому он считывает все до нулевого байта или EOF. –

ответ

0

Хотя fgets() предназначен для чтения до '\n' характера или заданного количества байтов, вы можете использовать fread() вместо этого, как этот

size_t count = fread(vhod, 1, sizeof(vhod), stdin); 

и сосчитать будет содержать количество элементов для чтения, который в этом случае совпадает с количеством байтов, поскольку вы предоставляете размер 1, т. е. sizeof(char).

Обратите внимание, однако, что вы должны быть очень осторожны, чтобы добавить завершающий '\0', если вы собираетесь использовать любую функцию, которая предполагает завершение '\0'.


Прочитайте инструкцию для получения дополнительной информации.

+0

Большое спасибо, я не знал, что этот фаст может получить все –