2018-02-05 17:22:04 +03:00
|
|
|
|
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>scan</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<h1>scan</h1>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Производит разбор строки в стиле процедуры <strong>sscanf</strong>.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>СИНТАКСИС</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<strong>scan</strong> <em>string</em> <em>format</em> <em>varName</em> ?<em>varName</em>...?
|
|
|
|
|
</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>ВВЕДЕНИЕ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Данная команда, подобно ANSI C процедуре <strong>sscanf</strong>,
|
|
|
|
|
просматривает строку <em>string</em>, выбирает поля и преобразует
|
|
|
|
|
их в соответствии с очередным спецификатором преобразования в
|
|
|
|
|
строке <em>format</em>. Выбранные значения преобразуются обратно в
|
|
|
|
|
строковый вид и последовательно записываются в переменные
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<em>varName</em>.</p>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>ПРОЦЕСС СКАНИРОВАНИЯ</h2>
|
|
|
|
|
|
|
|
|
|
<p>Команда <strong>scan</strong> просматривает одновременно строки
|
|
|
|
|
<em>string</em> и <em>format</em>. Если очередной символ в строке
|
|
|
|
|
<em>format</em> пробел или табуляция, то он соответствует любому
|
|
|
|
|
числу (включая ноль) пробельных символов (пробел, табуляция,
|
|
|
|
|
новая строка) в строке <em>string</em>. Если в строке
|
|
|
|
|
<em>format</em> встретился символ <strong>%</strong>, он означает начало
|
|
|
|
|
очередного спецификатора преобразования. Спецификатор
|
|
|
|
|
преобразования включает в себя до трех полей после символа
|
|
|
|
|
<strong>%</strong>: первое поле может содержать символ <strong>*</strong>,
|
|
|
|
|
означающий, что преобразуемая величина будет удалена, а не
|
|
|
|
|
записана в очередную переменную, второе поле может содержать
|
|
|
|
|
число, указывающее максимальную ширину поля, и третье поле
|
|
|
|
|
содержит букву, определяющую тип преобразования. Обязательным
|
|
|
|
|
является только третье поле.</p>
|
|
|
|
|
|
|
|
|
|
<p>Когда команда <strong>scan</strong> находит спецификатор
|
|
|
|
|
преобразования в строке <em>format</em>, она пропускает
|
|
|
|
|
пробельные символы в строке <em>string</em>. Затем она выбирает
|
|
|
|
|
следующую группу непробельных символов и преобразует их в
|
|
|
|
|
соответствии со спецификатором преобразования и записывает
|
|
|
|
|
результат в переменную, соответствующую следующему аргументу
|
|
|
|
|
команды. Поддерживаются следующие типы преобразований,
|
|
|
|
|
задаваемые соответствующими символами:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><strong>d</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле должно быть десятичным числом. Результат
|
|
|
|
|
записывается как десятичная строка.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>o</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле должно быть восьмеричным числом. Результат
|
|
|
|
|
преобразуется в десятичную строку.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>x</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле должно быть шестнадцатеричным числом.
|
|
|
|
|
Результат преобразуется в десятичную строку.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>c</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Читается один символ, его двоичная величина преобразуется и
|
|
|
|
|
записывается в переменную как десятичная строка. Начальные
|
|
|
|
|
пробельные символы в этом случае не пропускаются. В отличие от
|
|
|
|
|
ANSI C процедуры <strong>sscanf</strong> входное поле всегда состоит
|
|
|
|
|
ровно из одного символа, а ширина поля не может быть
|
|
|
|
|
задана.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>s</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле состоит из всех непробельных символов до
|
|
|
|
|
следующего пробельного. Все символы копируются в
|
|
|
|
|
переменную.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dt><strong>e</strong> или <strong>f</strong> или <strong>g</strong></dt>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле должно быть числом с плавающей точкой,
|
|
|
|
|
состоящим из знака (не обязательно), строки десятичных цифр,
|
|
|
|
|
возможно с десятичной точкой и порядка (не обязательно),
|
|
|
|
|
состоящего из буквы <strong>e</strong> или <strong>E</strong>, знака порядка (не
|
|
|
|
|
обязательно) и строки десятичных цифр.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>[<em>chars</em>]</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле состоит из произвольного числа символов из
|
|
|
|
|
<em>chars</em>. Соответствующая строка записывается в
|
|
|
|
|
переменную. Если первый символ в скобках <strong>]</strong>, то он
|
|
|
|
|
рассматривается как часть <em>chars</em>, а не как закрывающая
|
|
|
|
|
скобка для множества символов.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>[^<em>chars</em>]</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Входное поле состоит из произвольного числа символов, не
|
|
|
|
|
содержащихся в <em>chars</em>. Соответствующая строка
|
|
|
|
|
записывается в переменную. Если первый символ в скобках после
|
|
|
|
|
<strong>^</strong> есть <strong>]</strong>, то он рассматривается как
|
|
|
|
|
часть <em>chars</em>, а не как закрывающая скобка для множества
|
|
|
|
|
символов.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</dl>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Число символов, которое выбирается для преобразования, это
|
|
|
|
|
максимально возможное число символов для соответствующего
|
|
|
|
|
преобразования (например, так много десятичных цифр, как это
|
|
|
|
|
возможно для <strong>%d</strong>, или так много восьмеричных цифр, как это
|
|
|
|
|
возможно для <strong>%o</strong>). Поле, выбираемое для очередного
|
|
|
|
|
преобразования, закрывается, как только в строке <em>string</em>
|
|
|
|
|
встречается пробельный символ или как только поле достигает
|
|
|
|
|
указанного максимального размера (в зависимости от того, что
|
|
|
|
|
происходит раньше). Если в спецификаторе преобразования для
|
|
|
|
|
очередного поля присутствует символ <strong>*</strong>, то выбранное
|
|
|
|
|
значение не присваивает никакой переменной, а очередной аргумент
|
|
|
|
|
команды <strong>scan</strong> по-прежнему считается неиспользованным.</p>
|
|
|
|
|
|
|
|
|
|
<h2>ОТЛИЧИЯ ОТ ANSI SSCANF</h2>
|
|
|
|
|
|
|
|
|
|
<p>Поведение команды <strong>scan</strong> не отличается от поведения ANSI
|
|
|
|
|
C процедуры <strong>sscanf</strong> за исключением следующих моментов:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<table>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>[1]</td>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Спецификаторы <strong>%p</strong> и <strong>%n</strong> не поддерживаются.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>[2]</td>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Для спецификатора <strong>%c</strong> нельзя указывать ширину
|
|
|
|
|
поля. Только один символ переводится в десятичную
|
|
|
|
|
величину, которая и присваивается соответствующей
|
|
|
|
|
переменной.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>[3]</td>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Модификаторы <strong>l</strong>, <strong>h</strong> и <strong>L</strong> игнорируются. Целые
|
|
|
|
|
числа преобразуются так, как будто никакого модификатора
|
|
|
|
|
не было задано, а действительные числа - как при
|
|
|
|
|
модификаторе <strong>l</strong>, то есть с использованием типа
|
|
|
|
|
<strong>double</strong> для внутреннего представления.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|