[ Previous | Next | Table of Contents | Index | Library Home |
Legal |
Search ]
Technical Reference: Base Operating System and Extensions , Volume 2
Converts formatted input.
Standard C Library
(libc.a)
or (libc128.a)
#include <stdio.h>
int scanf ( Format [, Pointer, ... ])
const char *Format;
int fscanf (Stream, Format [, Pointer, ... ])
FILE * Stream;
const char *Format;
int sscanf (String, Format [, Pointer, ... ])
const char * String, *Format;
int wsscanf (wcs, Format [, Pointer, ... ])
const wchar_t * wcs
const char *Format;
The scanf,
fscanf, sscanf, and wsscanf subroutines read
character data, interpret it according to a format, and store the converted
results into specified memory locations. If the subroutine receives
insufficient arguments for the format, the results are unreliable. If
the format is exhausted while arguments remain, the subroutine evaluates the
excess arguments but otherwise ignores them.
These subroutines read their
input from the following sources:
scanf
| Reads from standard input (stdin).
|
fscanf
| Reads from the Stream parameter.
|
sscanf
| Reads from the character string specified by the String
parameter.
|
wsscanf
| Reads from the wide character string specified by the wcs
parameter.
|
The scanf,
fscanf, sscanf, and wsscanf subroutines can
detect a language-dependent radix character, defined in the program's
locale (LC_NUMERIC), in the input string. In the C locale,
or in a locale that does not define the radix character, the default radix
character is a full stop . (period).
wcs
| Specifies the wide-character string to be read.
|
Stream
| Specifies the input stream.
|
String
| Specifies input to be read.
|
Pointer
| Specifies where to store the interpreted data.
|
Format
| Contains conversion specifications used to interpret the input. If
there are insufficient arguments for the Format parameter, the
results are unreliable. If the Format parameter is exhausted
while arguments remain, the excess arguments are evaluated as always but are
otherwise ignored.
The Format parameter can contain the following:
- Space characters (blank, tab, new-line, vertical-tab, or
form-feed characters) that, except in the following two cases, read the input
up to the next nonwhite space character. Unless a match in the control
string exists, trailing white space (including a new-line character) is not
read.
- Any character except a % (percent sign), which must match
the next character of the input stream.
- A conversion specification that directs the conversion of
the next input field. The conversion specification consists of the
following:
|
Format (Continued)
|
The results from the conversion are placed in the memory location
designated by the Pointer parameter unless you specify assignment
suppression with an * (asterisk). Assignment suppression
provides a way to describe an input field to be skipped. The input
field is a string of nonwhite space characters. It extends to the next
inappropriate character or until the field width, if specified, is
exhausted.
The conversion code indicates how to
interpret the input field. The corresponding Pointer
parameter must be a restricted type. Do not specify the
Pointer parameter for a suppressed field. You can use the
following conversion codes:
- %
- Accepts a single % (percent sign) input at this point; no assignment
or conversion is done. The complete conversion specification should be
%% (two percent signs).
- d
- Accepts an optionally signed decimal integer with the same format as that
expected for the subject sequence of the strtol subroutine with a
value of 10 for the base parameter. If no size
modifier is specified, the Pointer parameter should be a pointer to
an integer.
- i
- Accepts an optionally signed integer with the same format as that expected
for the subject sequence of the strtol subroutine with a value
of 0 for the base parameter. If no size modifier
is specified, the Pointer parameter should be a pointer to an
integer.
- u
- Accepts an optionally signed decimal integer with the same format as that
expected for the subject sequence of the strtoul subroutine with a
value of 10 for the base parameter. If no size
modifier is specified, the Pointer parameter should be a pointer to
an unsigned integer.
- o
- Accepts an optionally signed octal integer with the same format as that
expected for the subject sequence of the strtoul subroutine with a
value of 8 for the base parameter. If no size
modifier is specified, the Pointer parameter should be a pointer to
an unsigned integer.
- x
- Accepts an optionally signed hexadecimal integer with the same format as
that expected for the subject sequence of the strtoul subroutine
with a value of 16 for the base parameter. If no
size modifier is specified, the Pointer parameter should be a
pointer to an integer.
- e, f, or
g
- Accepts an optionally signed floating-point number with the same format as
that expected for the subject sequence of the strtod
subroutine. The next field is converted accordingly and stored through
the corresponding parameter; if no size modifier is specified, this
parameter should be a pointer to a float. The input format for
floating-point numbers is a string of digits, with some optional
characteristics:
- It can be a signed value.
- It can be an exponential value, containing a decimal
rational number followed by an exponent field, which consists of an
E or an e followed by an (optionally signed)
integer.
- It can be one of the special values INF,
NaNQ, or NaNS. This value is translated into the
IEEE-754 value for infinity, quiet NaN, or signaling
NaN, respectively.
- p
- Matches an unsigned hexadecimal integer, the same as the %p
conversion of the printf subroutine. The corresponding
parameter is a pointer to a void pointer. If the input item is a value
converted earlier during the same program execution, the resulting pointer
compares equal to that value; otherwise, the results of the %p
conversion are unpredictable.
- n
- Consumes no input. The corresponding parameter is a pointer to an
integer into which the scanf, fscanf, sscanf,
or wsscanf subroutine writes the number of characters (including
wide characters) read from the input stream. The assignment count
returned at the completion of this function is not incremented.
- s
- Accepts a sequence of nonwhite space characters (scanf,
fscanf, and sscanf subroutines). The
wsscanf subroutine accepts a sequence of nonwhite-space
wide-character codes; this sequence is converted to a sequence of
characters in the same manner as the wcstombs subroutine.
The Pointer parameter should be a pointer to the initial byte of a
char, signed char, or unsigned char array
large enough to hold the sequence and a terminating null-character code, which
is automatically added.
- S
- Accepts a sequence of nonwhite space characters (scanf,
fscanf, and sscanf subroutines). This sequence is
converted to a sequence of wide-character codes in the same manner as the
mbstowcs subroutine. The wsscanf subroutine
accepts a sequence of nonwhite-space wide character codes. The
Pointer parameter should be a pointer to the initial wide character
code of an array large enough to accept the sequence and a terminating null
wide character code, which is automatically added. If the field width
is specified, it denotes the maximum number of characters to accept.
- c
- Accepts a sequence of bytes of the number specified by the field width
(scanf, fscanf and sscanf subroutines);
if no field width is specified, 1 is the default. The
wsscanf subroutine accepts a sequence of wide-character codes of
the number specified by the field width; if no field width is specified,
1 is the default. The sequence is converted to a sequence of characters
in the same manner as the wcstombs subroutine. The
Pointer parameter should be a pointer to the initial bytes of an
array large enough to hold the sequence; no null byte is added.
The normal skip over white space does not occur.
- C
- Accepts a sequence of characters of the number specified by the field
width (scanf, fscanf, and sscanf
subroutines); if no field width is specified, 1 is the default.
The sequence is converted to a sequence of wide character codes in the same
manner as the mbstowcs subroutine. The wsscanf
subroutine accepts a sequence of wide-character codes of the number specified
by the field width; if no field width is specified, 1 is the
default. The Pointer parameter should be a pointer to the
initial wide character code of an array large enough to hold the
sequence; no null wide-character code is added.
- [scanset]
- Accepts a nonempty sequence of bytes from a set of expected bytes
specified by the scanset variable (scanf,
fscanf, and sscanf subroutines). The
wsscanf subroutine accepts a nonempty sequence of wide-character
codes from a set of expected wide-character codes specified by the
scanset variable. The sequence is converted to a sequence of
characters in the same manner as the wcstombs subroutine.
The Pointer parameter should be a pointer to the initial character
of a char, signed char, or
unsigned char array large enough to hold the sequence
and a terminating null byte, which is automatically added. In the
scanf, fscanf, and sscanf subroutines, the
conversion specification includes all subsequent bytes in the string specified
by the Format parameter, up to and including the ] (right
bracket). The bytes between the brackets comprise the
scanset variable, unless the byte after the [ (left bracket) is a ^
(circumflex). In this case, the scanset variable contains
all bytes that do not appear in the scanlist between the ^ (circumflex) and
the ] (right bracket). In the wsscanf subroutine, the
characters between the brackets are first converted to wide character codes in
the same manner as the mbtowc subroutine. These wide
character codes are then used as described above in place of the bytes in the
scanlist. If the conversion specification begins with [] or [^], the
right bracket is included in the scanlist and the next right bracket is the
matching right bracket that ends the conversion specification. You can
also:
- Represent a range of characters by the construct
First-Last. Thus, you can express [0123456789] as
[0-9]. The First parameter must be lexically less than or
equal to the Last parameter or else the - (dash) stands for
itself. The - also stands for itself whenever it is the first or the
last character in the scanset variable.
- Include the ] (right bracket) as an element of the
scanset variable if it is the first character of the
scanset. In this case it is not interpreted as the bracket that
closes the scanset variable. If the scanset
variable is an exclusive scanset variable, the ] is preceded by the
^ (circumflex) to make the ] an element of the scanset. The
corresponding Pointer parameter should point to a character array
large enough to hold the data field and that ends with a null character
(\0). The \0 is added automatically.
A scanf conversion
ends at the end-of-file (EOF character), the end of the control string, or
when an input character conflicts with the control string. If it ends
with an input character conflict, the conflicting character is not read from
the input stream.
Unless a match in the control
string exists, trailing white space (including a new-line character) is not
read.
The success of literal matches
and suppressed assignments is not directly determinable.
The National Language Support
(NLS) extensions to the scanf subroutines can handle a format
string that enables the system to process elements of the argument list in
variable order. The normal conversion character % is replaced by
%n$, where n is a decimal number. Conversions are
then applied to the specified argument (that is, the nth argument),
rather than to the next unused argument.
The first successful run of the
fgetc, fgets,
fread, getc,
getchar, gets,
scanf, or fscanf subroutine using a stream that returns
data not supplied by a prior call to the ungetc (ungetc or ungetwc Subroutine) subroutine marks the st_atime field for
update.
These subroutines return the
number of successfully matched and assigned input items. This number
can be 0 if an early conflict existed between an input character and the
control string. If the input ends before the first conflict or
conversion, only EOF is returned. If a read error occurs, the error
indicator for the stream is set, EOF is returned, and the errno
global variable is set to indicate the error.
The scanf,
fscanf, sscanf, and wsscanf subroutines are
unsuccessful if either the file specified by the Stream,
String, or wcs parameter is unbuffered or data needs to
be read into the file's buffer and one or more of the following
conditions is true:
EAGAIN
| The O_NONBLOCK flag is set for the file descriptor underlying
the file specified by the Stream, String, or
wcs parameter, and the process would be delayed in the
scanf, fscanf, sscanf, or wsscanf
operation.
|
EBADF
| The file descriptor underlying the file specified by the
Stream, String, or wcs parameter is not a
valid file descriptor open for reading.
|
EINTR
| The read operation was terminated due to receipt of a signal, and either
no data was transferred or a partial transfer was not reported.
|
Note: Depending upon which library routine the application
binds to, this subroutine may return EINTR. Refer to the
signal (sigaction, sigvec, or signal Subroutine) subroutine regarding SA_RESTART.
EIO
| The process is a member of a background process group attempting to
perform a read from its controlling terminal, and either the process is
ignoring or blocking the SIGTTIN signal or the process group has no
parent process.
|
EINVAL
| The subroutine received insufficient arguments for the Format
parameter.
|
EILSEQ
| A character sequence that is not valid was detected, or a wide-character
code does not correspond to a valid character.
|
ENOMEM
| Insufficient storage space is available.
|
These subroutines are part of
Base Operating System (BOS) Runtime.
The atof,atoff, strtod, or
strtof subroutine, fread
subroutine, getc,
fgetc,getchar, or getw subroutine, gets or fgets subroutine, getwc, fgetwc, or getwchar
subroutine, mbstowcs subroutine, mbtowc subroutine, printf, fprintf,sprintf,
wsprintf, vprintf,
vfprintf,vsprintf, or vwsprintf
subroutine, setlocale (setlocale Subroutine) subroutine, strtol, strtoul,
atol, or atoi (strtol, strtoul, strtoll, strtoull, atol, or atoi Subroutine) subroutine, ungetc (ungetc or ungetwc Subroutine) subroutine, wcstombs (wcstombs Subroutine) subroutine.
Input and Output
Handling Programmer's Overview, National Language
Support Overview for Programming in AIX 5L Version 5.1 General
Programming Concepts: Writing and Debugging Programs.
[ Previous | Next | Table of Contents | Index |
Library Home |
Legal |
Search ]