scanf
Description:
Reads the data from string
The format string consists of whitespace characters (any single whitespace character in the format string consumes all available consecutive whitespace characters from the input), non-whitespace characters except % (each such character in the format strings consumes exactly one identical character from the input) and conversion specifications. Each conversion specification has the following format:
%[flags][width][.precision][length]specifier
Flags:
Character | Description |
+ | The sign of signed conversions is always prepended to the result of the conversion |
<space> | if the result of a signed conversion does not start with a sign character, or is empty, space is prepended to the result. It is ignored if + flag is present. |
- | The result of the conversion is left-justified within the field |
# | Alternative form of the conversion is performed. |
0 | Use 0 instead of spaces for padding when width is specified |
Width:
Integer value or * that specifies minimum field width. The result is padded with space characters (by default), if required, on the left when right-justified, or on the right if left-justified. In the case when * is used, the width is specified by an additional argument of type int. If the value of the argument is negative, it results with the - flag specified and positive field width.
Precision:
. followed by integer number or * that specifies precision of the conversion. In the case when * is used, the precision is specified by an additional argument of type int. If the value of this argument is negative, it is ignored.
Length:
Character | Description |
hh | char |
h | short |
l | long |
ll | long-long |
L | long double |
z | sizue_t |
j | intmax_t |
t | ptrdiff_t |
Specifier:
specifier | Output | Example |
a | Floating point, hexadecimal, lowercase | -0xc.90fep-2 |
A | Floating point, hexadecimal, uppercase | -0XC.90FEP-2 |
c | Character | c |
d, i | integer | 251 |
e | Mantissa/exponent (scientific), lowercase | 2.5121e+2 |
E | Mantissa/exponent (scientific), uppercase | 2.5121E+2 |
f | Floating point, decimal, lowercase | 2.32 |
F | Floating point, decimal, uppercase | 2.32 |
g | Floating point, shortest representation (%e or %f) | 512.23 |
G | Floating point, shortest representation (%E or %F) | 512.23 |
n | Nothing | |
o | Octal | 320 |
p | Pointer address | b2010020 |
s | String | my str |
u | Decimal integer | 93535 |
x | Integer, hexadecimal, lowercase | 3ab |
X | Integer, hexadecimal, uppercase | 3AB |
% | %% to output % | % |
Examples:
Format: | Parameters: | Output: |
"Characters:\t%c %%\n" | 65 | "Characters: A %" |
"Decimal:\t%i %d %.6i %i %.0i %+i %u\n" | 1, 2, 3, 0, 0, 4, -1 | "Decimal: 1 2 000003 0 +4 4294967295" |
"Hexadecimal:\t%x %x %X %#x\n" | 5, 10, 10, 6 | "Hexadecimal: 5 a A 0x6" |
"Octal:\t%o %#o %#o\n" | 10, 10, 4 | "Octal: 12 012 04" |
"Rounding:\t%f %.0f %.32f\n" | 1.5, 1.5, 1.3 | "Rounding: 1.500000 2 1.30000000626" |
"Padding:\t%05.2f %.2f %5.2f\n" | 1.5, 1.5, 1.5 | "Padding: 01.50 1.50 1.50" |
"Scientific:\t%E %e\n" | 1.5, 1.5 | "Scientific: 1.500000E+00 1.500000e+00" |
"Hexadecimal:\t%a %A\n" | 1.5, 1.5 | "Hexadecimal: 0x1.8p+0 0X1.8P+0" |
Example: Parse a string with scanf:
public static int main (string[] args) {
string data = "7-19-abc";
int seg1 = -1;
int seg2 = -1;
int seg3 = -1;
// Output: ``7, 19, -1``
data.scanf ("%d-%d-%d", &seg1, &seg2, &seg3);
print ("%d, %d, %d\n", seg1, seg2, seg3);
return 0;
}
valac --pkg glib-2.0 string.scanf.vala
Parameters:
format |
character string specifying how to read the input (See GLib.FileStream.printf) |
... |
receiving arguments |