- scanf
- scanf () и fscanf () в C — простой, но мощный
- fscanf, _fscanf_l, fwscanf, _fwscanf_l fscanf, _fscanf_l, fwscanf, _fwscanf_l
- Синтаксис Syntax
- Параметры Parameters
- Возвращаемое значение Return Value
- Комментарии Remarks
- Универсальное текстовое сопоставление функций Generic-Text Routine Mappings
- Требования Requirements
- fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l
- Синтаксис Syntax
- Параметры Parameters
- Возвращаемое значение Return Value
- Комментарии Remarks
- Универсальное текстовое сопоставление функций Generic-Text Routine Mappings
- Требования Requirements
- Функции fprintf( ) и fscanf( )
- Читайте также
- Функции
- Функции
- Функции
- Функции GMP
- 5.8.7 Функции
- 19.7.8. Функции
- 10.16 Функции TCP
- 8.6. Функции
- 3.1. Функции
- 3. Функции
- 4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации
- ВВОД-ВЫВОД ФАЙЛА: fprintf( ), fscanf( ), fgets( ) И fputs( )
- Функции
- Функции
- Видео
scanf
Функция scanf() является процедурой ввода общего назначения, считывающей данные из потока stdin. Она может считывать данные всех базовых типов и автоматически конвертировать их в нужный внутренний формат. Если бы printf() выполняла ввод, а не вывод, ее можно было бы назвать аналогом scanf().
Управляющая строка, на которую указывает format, состоит из символов трех типов:
Спецификаторы формата следуют за символом процент и сообщают scanf(), данные какого типа будут считаны следующими. Коды спецификаторов приведены в таблице.
Код | Значение |
---|---|
%с | Считать один символ |
%d | Считать десятичное число целого типа |
%i | Считать десятичное число целого типа |
%е | Считать число с плавающей запятой |
%f | Считать число с плавающей запятой |
%g | Считать число с плавающей запятой |
%о | Считать восьмеричное число |
%s | Считать строку |
%х | Считать шестнадцатиричное число |
%р | Считать указатель |
%n | Принимает целое значение, равное количеству считанных до текущего момента символов |
%u | Считывает беззнаковое целое |
%[] | Просматривает набор символов |
%% | Считывает символ % |
Например, %s считывает строку, a %d считывает переменную целого типа.
Строка формата считывается слева направо, при этом устанавливается соответствие между кодами формата и аргументами из списка аргументов.
Специальные символы в управляющей строке заставляют scanf() пропускать один или больше специальных символов во входном потоке. Специальные символы — это пробел, табуляция или новая строка. Один специальный символ в управляющей строке заставляет scanf() считывать, не запоминая, любое количество (включая нуль) идущих подряд специальных символов из входного потока, пока не встретится символ, не являющийся специальным символом.
Наличие обычного символа заставляет scanf() считать и отбросить соответствующий символ. Например, «%d,%d» заставляет scanf() считать целое число, считать и отбросить запятую и затем считать еще одно целое число. Если указанный символ не обнаружен во входном потоке, scanf() останавливается.
Все переменные, используемые для приема значений с помощью функции scanf(), должны отыскиваться по их адресам. Это значит, что все аргументы функции должны быть указателями на переменные. Таким образом, С создает возможность передачи по ссылке, и это позволяет функции изменять содержимое аргумента.
Например, чтобы считать целое число и присвоить его значение переменной count, необходимо воспользоваться следующим обращением к scanf():
Строки считываются в массивы символов, и имя массива, без всякого указателя, является адресом первого элемента массива. Поэтому, чтобы считать строку в массив символов address, можно использовать команду
В этом случае имя address уже является указателем и не нуждается в префиксе &.
Элементы вводимых данных должны разделяться пробелами, знаками табуляции или новой строки.
Знаки пунктуации, такие как запятая, точка с запятой и т.п., не считаются разделителями. Это значит, что для оператора
последовательность 10 20 будет воспринята, а последовательность 10,20 — нет. Спецификаторы формата scanf() расположены в том же порядке, что и переменные в списке аргументов, которым присваиваются значения принимаемых переменных.
Знак *, помещенный после % и перед спецификатором формата, считывает данные указанного типа, но подавляет их присваивание. Таким образом, код
при вводе последовательности 10/20 присваивает значение 10 переменной х, отбрасывает символ / и присваивает значение 20 переменной у.
Командами форматирования может задаваться модификатор максимальной ширины поля. Он представляет собой целое число, которое помещается между знаком % и спецификатором формата. Он ограничивает количество считываемых символов для любого поля. Например, если необходимо считать не больше, чем 20 символов в массив address, следует написать
Если входной поток содержал больше 20 символов, то при последующем вызове функция ввода начнет ввод с того места, где был остановлен ввод при текущем обращении. Ввод поля может быть прерван и до достижения максимальной длины поля, если встретится пробел. В этом случае scanf() переходит к следующему полю.
Хотя пробелы, символы табуляции и новых строк используются как разделители полей, они считываются как любой другой символ при вводе одиночного символа. Например, при входном потоке х у функция
поместит символ х в переменную а, пробел — в переменную b и y — в переменную c.
Надо быть внимательным: любые другие символы в управляющей строке — включая пробелы, символы табуляции и новых строк — используются для указания и отбрасывания символов из входного потока. Например, при входном потоке 10t20 функция
поместит 10 в х, а 20 в у. Символ t будет отброшен, поскольку в управляющей строке имеется t.
Еще одна возможность функции scanf() называется множеством сканирования. С помощью множества сканирования определяются символы, которые будут считываться функцией scanf() и присваиваться элементам соответствующего массива символов. Чтобы задать множество сканирования, надо символы, ввод которых допустим, поместить в квадратные скобки. Перед первой квадратной скобкой ставится знак процента. Например, следующий перечень множества сканирования задает считывание функцией scanf() только символов А, В и С:
Соответствующий перечню множества сканирования аргумент должен быть указателем на массив символов. При использовании множества сканирования функция scanf() считывает символы и помещает их в указанный массив до тех пор, пока не встретится символ, не входящий в множество сканирования (то есть считываются только символы, входящие в множество сканирования).
Массив, возвращенный scanf(), будет содержать строку с нулевым символом в конце. Перечень считываемых символов можно задать и в инверсной форме. Для этого в качестве первого символа надо поместить ^. Тогда scanf() будет принимать любой символ, не входящий в множество сканирования.
С помощью кавычек можно задать диапазон воспринимаемых символов. Например, следующее выражение дает указание scanf() принимать буквы от «А» до «Z»:
Множество сканирования различает прописные и строчные буквы. Если необходимо, чтобы scanf() принимала те и другие, необходимо перечислить их в множестве сканирования отдельно.
Функция scanf() возвращает число, равное количеству полей, значения которых были действительно присвоены переменным. В это количество не входят поля, которые были считаны, но их значения не были ничему присвоены вследствие использования модификатора * для подавления присваивания. Если до присвоения значения первого поля произошла ошибка, возвращается EOF.
При использовании Borland С++ в 16-разрядной среде можно изменить модель памяти, используемую по умолчанию для компилирования программы, путем явного указания размера каждого указателя, используемого при вызове scanf(). Ближний указатель задается модификатором N, а дальний — модификатором F. (Нельзя использовать модификатор N, если программа скомпилирована для модели памяти huge.)
scanf () и fscanf () в C — простой, но мощный
Многие из нас знают традиционное использование scanf. Ну, вот некоторые из менее известных фактов
Ввод: «это значение 21,2»,
Вывод: значение прочитано 21,2
/ * C программа, чтобы продемонстрировать, что мы можем
игнорировать некоторую строку в scanf () * /
>
// Вход: это значение 100
// Вывод: чтение входного значения: a = 100
Теперь предположим, что мы не знаем, что представляют собой предыдущие символы, но мы точно знаем, что последнее значение является целым числом. Как мы можем отсканировать последнее значение как целое число?
Приведенное ниже решение работает, только если во входной строке нет пробелов.
/ * Пример программы на C для демонстрации использования * s * /
#include
// Ввод: «блаблабла 25»
// Вывод: прочитанное значение: 25
Объяснение :% * s в scanf используется для игнорирования некоторых входных данных при необходимости. В этом случае он игнорирует ввод до следующего пробела или новой строки. Аналогично, если вы напишите% * d, он будет игнорировать целые числа до следующего пробела или новой строки.
Вышеуказанный факт не может показаться полезным на первый взгляд. Чтобы понять его использование, давайте сначала посмотрим на fscanf ().
fscanf (): Устали от всего слипчивого синтаксиса для чтения из файлов? хорошо, fscanf приходит на помощь.
fscanf читает из файла, на который указывает указатель FILE (ptr), вместо чтения из входного потока.
Рассмотрим следующий текстовый файл abc.txt
Теперь мы хотим прочитать только поле города указанного выше текстового файла, игнорируя все остальные поля. Комбинация fscanf и трюка, упомянутого выше, делает это легко
/ * c программа, демонстрирующая fscanf и его использование * /
#include
printf ( «no such file.» );
/ * Предполагая, что abc.txt имеет содержимое ниже
ИМЯ ВОЗРАСТНЫЙ ГОРОД
Упражнение: Подсчитайте количество слов, символов и строк в файле с помощью fscanf!
Эта статья предоставлена Нихилом Чакравартулой. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
fscanf, _fscanf_l, fwscanf, _fwscanf_l fscanf, _fscanf_l, fwscanf, _fwscanf_l
Считывают форматированные данные из потока. Read formatted data from a stream. Доступны более безопасные версии этих функций; см. раздел fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l. More secure versions of these functions are available; see fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l.
Синтаксис Syntax
Параметры Parameters
вышестоящий stream
Указатель на структуру FILE. Pointer to FILE structure.
format format
Строка управления форматом. Format-control string.
argument argument
Необязательные аргументы. Optional arguments.
locale locale
Используемый языковой стандарт. The locale to use.
Возвращаемое значение Return Value
Каждая из этих функций возвращает количество полей, которые были успешно преобразованы и присвоены; возвращаемое значение не включает поля, которые были считаны, но не были присвоены. Each of these functions returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. Возвращаемое значение 0 указывает, что поля не были назначены. A return value of 0 indicates that no fields were assigned. При возникновении ошибки или при достижении конца файлового потока до первого преобразования возвращается значение EOF для fscanf и fwscanf. If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf and fwscanf.
Эти функции проверяют свои параметры. These functions validate their parameters. Если Stream или Format является пустым указателем, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. If stream or format is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. Если выполнение может быть продолжено, эти функции возвращают EOF и применяют значение еинвал. If execution is allowed to continue, these functions return EOF and set errno to EINVAL.
Комментарии Remarks
fwscanf — это версия fscanf для расширенных символов; аргумент формата для fwscanf является строкой расширенных символов. fwscanf is a wide-character version of fscanf; the format argument to fwscanf is a wide-character string. Эти функции ведут себя одинаково, если поток открыт в режиме ANSI. These functions behave identically if the stream is opened in ANSI mode. fscanf в настоящее время не поддерживает входные данные из потока Юникода. fscanf doesn’t currently support input from a UNICODE stream.
Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо локали текущего потока. The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.
Универсальное текстовое сопоставление функций Generic-Text Routine Mappings
Подпрограмма TCHAR.H TCHAR.H routine | _UNICODE и _MBCS не определены _UNICODE & _MBCS not defined | _MBCS определено _MBCS defined | _UNICODE определено _UNICODE defined |
---|---|---|---|
_ftscanf _ftscanf | fscanf fscanf | fscanf fscanf | fwscanf fwscanf |
_ftscanf_l _ftscanf_l | _fscanf_l _fscanf_l | _fscanf_l _fscanf_l | _fwscanf_l _fwscanf_l |
Требования Requirements
Функция Function | Обязательный заголовок Required header |
---|---|
fscanf, _fscanf_l fscanf, _fscanf_l | |
fwscanf, _fwscanf_l fwscanf, _fwscanf_l | или or |
Дополнительные сведения о совместимости см. в статье Compatibility. For additional compatibility information, see Compatibility.
fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l
Считывают форматированные данные из потока. Reads formatted data from a stream. Эти версии fscanf, _fscanf_l, fwscanf, _fwscanf_l отличаются повышенной безопасностью (см. раздел Усовершенствования безопасности в CRT). These versions of fscanf, _fscanf_l, fwscanf, _fwscanf_l have security enhancements, as described in Security Features in the CRT.
Синтаксис Syntax
Параметры Parameters
вышестоящий stream
Указатель на структуру FILE. Pointer to FILE structure.
format format
Строка управления форматом. Format-control string.
argument argument
Необязательные аргументы. Optional arguments.
locale locale
Используемый языковой стандарт. The locale to use.
Возвращаемое значение Return Value
Каждая из этих функций возвращает количество полей, которые были успешно преобразованы и присвоены; возвращаемое значение не включает поля, которые были считаны, но не были присвоены. Each of these functions returns the number of fields that are successfully converted and assigned; the return value does not include fields that were read but not assigned. Возвращаемое значение 0 указывает, что поля не были назначены. A return value of 0 indicates that no fields were assigned. При возникновении ошибки или при достижении конца файлового потока до первого преобразования возвращается значение EOF для fscanf_s и fwscanf_s. If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf_s and fwscanf_s.
Эти функции проверяют свои параметры. These functions validate their parameters. Если Stream является недопустимым указателем на файл или Format является пустым указателем, эти функции вызывают обработчик недопустимого параметра, как описано в разделе Проверка параметров. If stream is an invalid file pointer, or format is a null pointer, these functions invoke the invalid parameter handler, as described in Parameter Validation. Если выполнение может быть продолжено, эти функции возвращают EOF и применяют значение еинвал. If execution is allowed to continue, these functions return EOF and set errno to EINVAL.
Комментарии Remarks
Основное различие между более безопасными функциями (с суффиксом _s ) и другими версиями заключается в том, что более безопасные функции требует, чтобы размер в символах каждого поля c, c, s и [ Type передавался в качестве аргумента, непосредственно следующего за переменной. The main difference between the more secure functions (that have the _s suffix) and the other versions is that the more secure functions require the size in characters of each c, C, s, S, and [ type field to be passed as an argument immediately following the variable. Дополнительные сведения см. в разделах scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l и Спецификация ширины scanf. For more information, see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l and scanf Width Specification.
Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока. The versions of these functions that have the _l suffix are identical except that they use the locale parameter that’s passed in instead of the current thread locale.
Универсальное текстовое сопоставление функций Generic-Text Routine Mappings
Подпрограмма TCHAR.H TCHAR.H routine | _UNICODE и _MBCS не определены _UNICODE & _MBCS not defined | _MBCS определено _MBCS defined | _UNICODE определено _UNICODE defined |
---|---|---|---|
_ftscanf_s _ftscanf_s | fscanf_s fscanf_s | fscanf_s fscanf_s | fwscanf_s fwscanf_s |
_ftscanf_s_l _ftscanf_s_l | _fscanf_s_l _fscanf_s_l | _fscanf_s_l _fscanf_s_l | _fwscanf_s_l _fwscanf_s_l |
Требования Requirements
Функция Function | Обязательный заголовок Required header |
---|---|
fscanf_s, _fscanf_s_l fscanf_s, _fscanf_s_l | |
fwscanf_s, _fwscanf_s_l fwscanf_s, _fwscanf_s_l | или or |
Дополнительные сведения о совместимости см. в статье Compatibility. For additional compatibility information, see Compatibility.
Функции fprintf( ) и fscanf( )
Функции fprintf( ) и fscanf( )
Эти функции ввода-вывода работают почти как printf( ) и scanf( ), но им нужен дополнительный аргумент для ссылки на сам файл. Он является первым в списке аргументов. Вот пример, иллюстрирующий обращение к этим функциям:
/* образец использования fprintf( ) и fscanf( ) */
fi = fopen(«sam», «r»); /* считывание */
fscanf(fi, «%d», &age); /* fi указывает на sam */
fi = fopen(«data», «a»); /* дополнение «/
fprintf(fi, «sam is %d. «, age); /* fi указывает на data */
Заметим, что можно было использовать fi для двух различных файлов, потому что мы закрыли первый файл, прежде чем открыть второй.
В отличие от getc( ) и putc( ) эти две функции получают указатель типа FILE в качестве первого аргумента. Две другие, описанные ниже, получают его в качестве последнего аргумента.
Читайте также
Функции
Функции Существует мнемоническое правило: функции не должны по объему кода превышать двух экранов текста и иметь больше десяти локальных переменных. Каждая функция должна выполнять одно действие, но делать это хорошо. Не вредно разбить функцию на последовательность
Функции
Функции Функции в JScript, как и в других алгоритмических языках, позволяют объединить несколько операций под одним именем. В случае необходимости функция может быть вызвана из любого места сценария.В сценариях JScript поддерживаются два вида функций: встроенные функции и
Функции
Функции Функция — это особым образом написанный и оформленный фрагмент кода JavaScript, который можно вызвать из любого Web-сценария на данной Web-странице (повторно используемый код, как его часто называют). Так что, если какой-то фрагмент кода встречается в нескольких местах
Функции GMP
Функции GMP ПодразделыФункции Введение Функции этого вида позволяют работать с целыми числами повышенной точности определенного формата используя библиотеку GNU MP.Эта библиотека не входит в стандартный пакет PHP. Загрузить коды библиотеки и документацию по ней можно на
5.8.7 Функции
5.8.7 Функции СинтаксисОболочка bash позволяет пользователю создавать собственные функции. Функции ведут себя и используются точно так же, как обычные команды оболочки, т. е. мы можем сами создавать новые команды. Функции конструируются следующим образом: function name () Причем
19.7.8. Функции
19.7.8. Функции Описание функции выглядит так: имя() < список; >Пример:cdir()< # изменяем каталог cd / >При выполнении функция не создает нового процесса, а выполняется в среде процесса, содержащего эту функцию. Аргументы функции можно передать ей как обыкновенные параметры при
10.16 Функции TCP
10.16 Функции TCP Данная глава посвящена многочисленным функциям TCP. Ниже перечислены основные из них:? Связывание портов с соединениями? Инициализация соединений посредством трехшагового подтверждения? Выполнение медленного старта, исключающего перегрузку
8.6. Функции
8.6. Функции Оператор определения функции имеет следующий синтаксис:[function] имя() < список>Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания. Вызывается функция подобно любой команде — по имени. Переданные ей аргументы
3.1. Функции
3.1. Функции Пример 1.7: Функция вычисляющая факториал.VAR A, Y : INTEGER;FUNCTION FAKTORIAL (N : INTEGER) : INTEGER; VAR F, K : INTEGER; BEGIN F := 1; FOR K := 1 TO N DO F := F * K; FAKTORIAL := F END; BEGINWRITELN (‘ВВЕДИТЕ ЦЕЛОЕ ПОЛОЖИТЕЛЬНОЕ ЧИСЛО’);READLN (A);Y := FAKTORIAL (A);WRITELN (‘N!=’, Y);READLN;READLNEND.Обратите внимание на то, что в описании функции
3. Функции
3. Функции В C есть только функции, а процедур нет.Тело функции не может содержать в себе определения других функций.Функцию можно вызвать из другой функции.Оператор return возвращает выполнение программы в точку вызова функции.При использовании return; функция
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел «4.5.2. Функции Geometry» обсуждает несколько функций, которые создают новые конфигурации из
ВВОД-ВЫВОД ФАЙЛА: fprintf( ), fscanf( ), fgets( ) И fputs( )
ВВОД-ВЫВОД ФАЙЛА: fprintf( ), fscanf( ), fgets( ) И fputs( ) Все функции ввода-вывода, которые мы использовали в предыдущих главах, имеют аналоги для ввода-вывода файла. Основное отличие состоит в том, что вам нужно использовать указатель типа FILE, чтобы сообщить новым функциям, с каким
Функции
Функции Excel – серьезная программа для вычислений, одним из главных достоинств которой является множество встроенных функций. Это обширная тема, достойная если не книги, то главы в многотомном руководстве. Рассмотрим ее кратко – ровно настолько, чтобы вы могли далее
Функции
Функции В табл. П3.1–П3.5 представлено описание наиболее часто используемых функций.Таблица П3.1. Булевые функции Функция Описание boolean boolean(object) Явным образом преобразует объект, который ей передается в булевый тип boolean not(boolean) Выполняет логическое
Видео
Язык Си для начинающих / #9 - Работа с файламиСкачать
Язык Си для начинающих / #6 - Функции в СиСкачать
Программирование на Си урок 30: Функции ввода и вывода строк в языке СиСкачать
С С++ Использование fscanf, fprintfСкачать