2.12.4.2 ..scanf Functions

Declarations:

int fscanf(FILE *stream, const char *format, ...);
int scanf(const char *
format, ...);
int sscanf(const char *
str, const char *format, ...);

The ..scanf functions provide a means to input formatted information from a stream.

fscanfreads formatted input from a stream
scanfreads formatted input from stdin
sscanfreads formatted input from a string

These functions take input in a manner that is specified by the format argument and store each input field into the following arguments in a left to right fashion.

Each input field is specified in the format string with a conversion specifier which specifies how the input is to be stored in the appropriate variable. Other characters in the format string specify characters that must be matched from the input, but are not stored in any of the following arguments. If the input does not match then the function stops scanning and returns. A whitespace character may match with any whitespace character (space, tab, carriage return, new line, vertical tab, or formfeed) or the next incompatible character.

An input field is specified with a conversion specifer which begins with the % character. After the % character come the following in this order:

[*]Assignment suppressor (optional).
[width]Defines the maximum number of characters to read (optional).
[modifier]Overrides the size (type) of the argument (optional).
[type]The type of conversion to be applied (required).

Assignment suppressor:
Causes the input field to be scanned but not stored in a variable.

Width:
The maximum width of the field is specified here with a decimal value. If the input is smaller than the width specifier (i.e. it reaches a nonconvertible character), then what was read thus far is converted and stored in the variable.

Modifier:
A modifier changes the way a conversion specifier type is interpreted.

[modifier][type]Effect
hdiouxThe argument is a short int or unsigned short int.< /td>
hnSpecifies that the pointer points to a short int.
ldiouxThe argument is a long int or unsigned long int .
lnSpecifies that the pointer points to a long int.
lefgThe argument is a double.
LefgThe argument is a long double.

Conversion specifier type:
The conversion specifier specifies what type the argument is. It also controls what a valid convertible character is (what kind of characters it can read so it can convert to something compatible).

[type]Input
dType signed int represented in base 10. Digits 0 through 9 and the sign (+ or -).
iType signed int. The base (radix) is dependent on the first two characters. If the first character is a digit from 1 to 9, then it is base 10. If the first digit is a zero and the second digit is a digit from 1 to 7, then it is base 8 (octal). If the first digit is a zero and the second character is an x or X, then it is base 16 (hexadecimal).
oType unsigned int. The input must be in base 8 (octal). Digits 0 through 7 only.
uType unsigned int. The input must be in base 10 (decimal). Digits 0 through 9 only.
x, XType unsigned int. The input must be in base 16 (hexadecimal). Digits 0 through 9 or A through Z or a through z. The characters 0x or 0X may be optionally prefixed to the value.
eE,fg,GType float. Begins with an optional sign. Then one or more digits, followed by an optional decimal-point and decimal value. Finally ended with an optional signed exponent value designated with an e or E.
sType character array. Inputs a sequence of non-whitespace characters (space, tab, carriage return, new line, vertical tab, or formfeed). The array must be large enough to hold the sequence plus a null character appended to the end.
[...]Type character array. Allows a search set of characters. Allows input of only those character encapsulated in the brackets (the scanset). If the first character is a carrot (^), then the scanset is inverted and allows any ASCII character except those specified between the brackets. On some systems a range can be specified with the dash character (-). By specifying the beginning character, a dash, and an ending character a range of characters can be included in the scanset. A null character is appended to the end of the array.
cType character array. Inputs the number of characters specified in the width field. If no width field is specified, then 1 is assumed. No null character is appended to the array.
pPointer to a pointer. Inputs a memory address in the same fashion of the %p type produced by the printf function.
nThe argument must be a pointer to an int. Stores the number of characters read thus far in the int. No characters are read from the input stream.
%Requires a matching % sign from the input.

Reading an input field (designated with a conversion specifier) ends when an incompatible character is met, or the width field is satisfied.

On success the number of input fields converted and stored are returned. If an input failure occurred, then EOF is returned.