2013-10-08 2 views
0

Я хочу использовать бесконечные спецификаторы типа (% c) в функции scanf().Как использовать спецификаторы бесконечного типа в функции scanf() в C?

Для ПРИМЕР-

printf("Enter characters: \t"); 
scanf("--SPECIFIERS--"); 

Таким образом, ее не определенным, сколько символов пользователь будет вводить. Я не хочу, чтобы моя программа запрашивала у пользователя «количество символов» .. но я хочу разрешить любое количество символов. Но невозможно ввести бесконечный% c в scanf(). Может ли кто-нибудь сказать мне, как это сделать в C?

+1

'% s', чтобы прочитать строку в буфер. – us2012

+0

@ us2012: '% s' пропускает ведущее белое пространство и останавливается в первом пробеле после последовательности непространственных символов. –

+0

Или проще, замените 'scanf (% s, s)' by 'gets (s)' –

ответ

0

Использовать %s в качестве классификатора для scanf. Один упоминается, как показано ниже:

scanf("%s",buf); 

, где ЬиЙ имеет типа:

char buf[100]; 
+0

Есть удаленный ответ, который вы не видите, что примерно соответствует вашему ответу. Как отмечено в комментариях к вопросу, проблема с '% s' заключается в том, что он пропускает ведущее белое пространство и останавливается в первом пробеле после этого. Кроме того, вы должны указать ''% 99s'', если ваш буфер имеет длину в 100 байтов (и да, здесь по-отдельности есть по сравнению с большинством других функций). –

2

Я хочу использовать бесконечные спецификатор типа (% С) зсапом функции().

Вы хотите прочитать неуказанный объем данных. Есть несколько подходов, вы можете попробовать:

  • Используйте стандартный getline(3) функции POSIX
  • Используйте POSIX стандарт m присвоение распределения в scanf() семействе функций

    char *str; 
    scanf("%m[^\n]", &str); 
    
  • чтение входных один char за раз и увеличивать буфер, когда вы идете. Есть несколько функций, носятся на StackOverflow, делая именно этот

Первый 2 также выделить память, которая Вам необходимо free(3).

+0

Это здорово .. Я не знал об этом .. Так как бы вы освободили str? – sukhvir

+0

Вы можете просто сделать 'free (str)'. – cnicutar

+0

'free (str)' - точно так же, как и любая другая динамически распределенная память. –

Смежные вопросы