Reads data from the a variety of sources, interprets it according to format
and stores the results into given locations.
stdin
stream
buffer
. Reaching the end of the string is equivalent to reaching the end-of-file condition for fscanf
%c
, %s
, and %[
conversion specifiers each expect two arguments (the usual pointer and a value of type rsize_t
indicating the size of the receiving array, which may be 1 when reading with a %c into a single char) and except that the following errors are detected at runtime and call the currently installed constraint handler function: format
, stream
, or buffer
is a null pointer scanf_s
, fscanf_s
, and sscanf_s
are only guaranteed to be available if __STDC_LIB_EXT1__
is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__
to the integer constant 1
before including <stdio.h>
.stream | - | input file stream to read from | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buffer | - | pointer to a null-terminated character string to read from | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | - | pointer to a null-terminated character string specifying how to read the input. The format string consists of.
The following format specifiers are available:
For every conversion specifier other than All conversion specifiers other than The conversion specifiers The conversion specifiers The correct conversion specifications for the fixed-width integer types ( There is a sequence point after the action of each conversion specifier; this permits storing multiple fields in the same "sink" variable. When parsing an incomplete floating-point value that ends in the exponent with no digits, such as parsing |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... | - | receiving arguments |
EOF
if input failure occurs before the first receiving argument was assigned.Because most conversion specifiers first consume all consecutive whitespace, code such as.
will read two integers that are entered on different lines (second %d will consume the newline left over by the first) or on the same line, separated by spaces or tabs (second %d will consume the spaces or tabs). The conversion specifiers that do not consume leading whitespace, such as %c, can be made to do so by using a whitespace character in the format string:
#define __STDC_WANT_LIB_EXT1__ 1 #include <stdio.h> #include <stddef.h> #include <locale.h> int main(void) { int i, j; float x, y; char str1[10], str2[4]; wchar_t warr[2]; setlocale(LC_ALL, "en_US.utf8"); char input[] = "25 54.32E-1 Thompson 56789 0123 56ß水"; /* parse as follows: %d: an integer %f: a floating-point value %9s: a string of at most 9 non-whitespace characters %2d: two-digit integer (digits 5 and 6) %f: a floating-point value (digits 7, 8, 9) %*d: an integer which isn't stored anywhere ' ': all consecutive whitespace %3[0-9]: a string of at most 3 decimal digits (digits 5 and 6) %2lc: two wide characters, using multibyte to wide conversion */ int ret = sscanf(input, "%d%f%9s%2d%f%*d %3[0-9]%2lc", &i, &x, str1, &j, &y, str2, warr); printf("Converted %d fields:\ni = %d\nx = %f\nstr1 = %s\n" "j = %d\ny = %f\nstr2 = %s\n" "warr[0] = U+%x warr[1] = U+%x\n", ret, i, x, str1, j, y, str2, warr[0], warr[1]); #ifdef __STDC_LIB_EXT1__ int n = sscanf_s(input, "%d%f%s", &i, &x, str1, (rsize_t)sizeof str1); // writes 25 to i, 5.432 to x, the 9 bytes "thompson\0" to str1, and 3 to n. #endif }
Output:
(C99)(C99)(C99)(C11)(C11)(C11) | reads formatted input from stdin , a file stream or a bufferusing variable argument list (function) |
gets a character string from a file stream (function) |
|
(C99)(C11)(C11)(C11)(C11) | prints formatted output to stdout , a file stream or a buffer (function) |
C++ documentation for scanf, fscanf, sscanf |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/io/fscanf