6.4. Приложение №1. Описание функций sprintf и sscanf
ФУНКЦИЯ |
SPRINTF |
ОПРЕДЕЛЕНА В: |
<stdio.h> |
СИНТАКСИС: |
int sprintf( buffer, format_string[, argument...]);
-
char *buffer - символьная строка, в которую записывается результат вывода переменных, заданных параметрами argument, отформатированных с помощью строки форматов;
-
const char *format_string - строка форматов для вывода аргументов;
|
НАЗНАЧЕНИЕ: |
Вывод значений переменных в заданный буфер при помощи строки форматов; |
ОПИСАНИЕ: |
Функция sprintf форматирует и выводит последовательности символов и значений аргументов в символьный массив, адрес которого задаётся значением аргумента buffer. Каждый аргумент преобразуется и выводится согласно соответствующей спецификации в строке, адрес которой задаётся значением параметра format_string. Строка описания формата вывода интерпретируется так же, как и для функции printf. |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: |
Число символов, помещённых в строку, адрес которой задаётся значением параметра buffer. |
ПЕРЕНОСИМОСТЬ: |
Стандарт ANSI, работает во всех реализациях Си; |
ФУНКЦИЯ |
SSCANF |
ОПРЕДЕЛЕНА В: |
<stdio.h> |
СИНТАКСИС: |
int sscanf( buffer, format_string[, argument...]);
-
const char *buffer - символьная строка, из которой считывается значения переменных, заданных параметрами argument и формируемых с помощью строки форматов;
-
const char *format_string - строка форматов для ввода аргументов;
|
НАЗНАЧЕНИЕ: |
Чтение значений переменных из заданного буфера при помощи строки форматов; |
ОПИСАНИЕ: |
Функция sscanf читает данные из символьного массива, адрес которого задаётся значением переменной buffer, в переменные, адреса которых задаются аргументами arguments. Каждый аргумент должен быть указателем на переменную с типом, соответствующему типу, определённому в строке описания формата, адрес которой задаётся значением параметра format_string. Строка описания формата управляет интерпретацией входных полей и имеет тот же вид, что и для функции scanf. |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: |
Число полей, которые были успешно преобразованы и присвоены. Возвращаемое значение не включает поля, которые были прочитаны, но не были присвоены. Значение EOF, если была попытка прочитать символ конца строки. Значение "0", если не было присвоенных полей. |
ПЕРЕНОСИМОСТЬ: |
Стандарт ANSI, работает во всех реализациях Си; |
ФУНКЦИЯ |
scanf |
ОПРЕДЕЛЕНА В: |
<stdio.h> |
СИНТАКСИС: |
int scanf( format_string[,argument…] );
char *format_string;
|
НАЗНАЧЕНИЕ: |
Функция scanf читает данные из стандартного потока ввода stdin в переменные, адреса которых задаются аргументами arguments. Функция имеет переменное число параметров; |
ОПИСАНИЕ: |
Значение параметра format_string задаёт адрес строки, которая управляет интерпретацией вводимых полей. Каждый последующий аргумент должен быть указателем на переменную типа, соответствующей типу, определённой в строке формата. Строка описания формата ввода может содержать:
- Пробельные символы: ' ', '\t', '\n'. Если пробельный символ встретился в строке формата, то с этого момента пробельные символы считываются из потока ввода вплоть до первого символа, не являющимися пробельным, но не участвуют в присвоении значений (т.е. игнорируются);
- Печатные символы - все прочие символы, не являющиеся символом '%', эти символы считываются из потока и проверяются на соответствие символам строки формата. Если нет совпадения символов в строке и стандартном потоке, считывание символов прекращается, и функция возвращает ошибку;
-
Спецификация формата, начинающаяся со знака '%'. Спецификация формата заставляет функцию прочитать и преобразовать символы на входе в значение указанной аргументах переменной. Значение присваивается переменной, адрес которой указан в списке аргументов;
Строка форматов читается слева направо. Входное поле, выделяемое из потока ввода, включает в себя все символы вплоть до первого пробельного символа, первого символа, который не может быть преобразован в значение переменной в соответствии со спецификацией, или когда прочитано число символов, определённой в модификаторе width. Лишние символы из входного потока игнорируются. При задании аргументов меньше, чем в строке формата, результат не определён; |
ПРИМЕЧАНИЕ: |
SCANF часто приводит к непредсказуемым результатам, когда Вы отклоняетесь от точного шаблона. Вам следует помнить, что нужно указывать функции scanf, каким образом синхронизировать конец строки. В результате бывает предпочтительней комбинация из вызовов функций fgets и sscanf последовательно друг за другом; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: |
Число полей, которые были успешно преобразованы и присвоены. Возвращаемое значение не содержит полей, которые были прочитаны, но не присвоены; EOF - Если была сделана попытка прочитать конец файла;
0 - если не было присваивания полей;
|
ПЕРЕНОСИМОСТЬ: |
Функция scanf поддерживается в операционных системах, основанных на UNIX, определена в стандарте ANSI C. Также функция определена в стандарте Кернигана и Ритчи. |
ФУНКЦИЯ: |
gets |
ОПРЕДЕЛЕНА В: |
<stdio.h> |
СИНТАКСИС: |
char *gets( s );
char *s;
|
НАЗНАЧЕНИЕ: |
Функция получает строку из потока; |
ОПИСАНИЕ: |
Функция gets читает строку символов, оканчивающуюся символом перевода строки, в переменную s из стандартного входного потока stdin. Данная символьная строка оканчивается символом перехода на новую строку, который при записи в s заменяется нулевым окончанием '\0' ; |
ЗАМЕЧАНИЯ: |
- В отличие от scanf, gets позволяет вводить строки, содержащие символы пробела и табуляции. Всё, что было введено до перевода каретки, помещается в s ;
- ВНИМАНИЕ! Данная функция может вызывать ошибки типа: "переполнения буфера", и с её помощью хакер может получить контроль над Вашим компьютером. При возможности заменяйте эту функцию функцией fgets ;
|
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: |
При успешном завершении функция gets возвращает строку s. При достижении конца файла (EOF) или ошибке возвращается NULL ; |
ПЕРЕНОСИМОСТЬ: |
Функция поддерживается на операционных системах, основанных на UNIX и стандартом ANSI C. |
ФУНКЦИЯ: |
getc |
ОПРЕДЕЛЕНА В: |
<stdio.h> |
СИНТАКСИС: |
int getc( stream );
FILE *stream;
|
НАЗНАЧЕНИЕ: |
Функция вводит из потока символ; |
ОПИСАНИЕ: |
Функция getc представляет собой макрокоманду, которая получает следующий по-порядку символ из входного потока stream и увеличивает указатель текущего положения в потоке на единицу; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: |
При успешном завершении функция getc возвращает считанный символ после предварительного его преобразования в целый тип. При возникновении ситуации "конец файла" и при ошибке ввода она возвращает значение EOF; |
ПЕРЕНОСИМОСТЬ: |
Функция поддерживается в операционных системах UNIX, поддерживается стандартом ANSI C, и описана в стандарте Кернигана и Ритчи. |
ФУНКЦИЯ: |
getchar |
ОПРЕДЕЛЕНА В: |
<stdio.h> |
СИНТАКСИС: |
int getchar(); |
НАЗНАЧЕНИЕ: |
Функция вводит символ из потока stdin ; |
ОПИСАНИЕ: |
getchar - это макрокоманда, вводящая символ из потока stdin Она определена следующим образом: getc( stdin ) ; |
ЗАМЕЧАНИЕ: |
getchar читает символы с stdin, который имеет буфер на одну строку. Поэтому она ничего не возвращает до тех пор, пока вы не нажмёте Enter ; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: |
При успешном завершении функция getchar возвращает считанный символ после предварительного преобразования его в целый тип. При ошибке оно возвращает значение EOF; |
ПЕРЕНОСИМОСТЬ: |
Функция поддерживается в операционных системах UNIX, стандартом ANSI C, и описана в стандарте Кернигана и Ритчи. |
Более подробное описание функций ввода на языке Си смотрите [3].