std::scanf, std::fscanf, std::sscanf
Defined in header <cstdio> | ||
---|---|---|
int scanf( const char* format, ... ); | (1) | |
int fscanf( std::FILE* stream, const char* format, ... ); | (2) | |
int sscanf( const char* buffer, const char* format, ... ); | (3) |
Reads data from the a variety of sources, interprets it according to format
and stores the results into given locations.
stdin
stream
buffer
Parameters
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 |
Return value
Number of receiving arguments successfully assigned (which may be zero in case a matching failure occurred before the first receiving argument was assigned), or EOF
if input failure occurs before the first receiving argument was assigned.
Notes
Because most conversion specifiers first consume all consecutive whitespace, code such as.
std::scanf("%d", &a); std::scanf("%d", &b);
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:
std::scanf("%d", &a); std::scanf(" %c", &c); // ignore the endline after %d, then read a char
Example
#include <iostream> #include <clocale> #include <cstdio> int main() { int i, j; float x, y; char str1[10], str2[4]; wchar_t warr[2]; std::setlocale(LC_ALL, "en_US.utf8"); char input[] = u8"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 digits (digits 5 and 6) // %2lc: two wide characters, using multibyte to wide conversion int ret = std::sscanf(input, "%d%f%9s%2d%f%*d %3[0-9]%2lc", &i, &x, str1, &j, &y, str2, warr); std::cout << "Converted " << ret << " fields:\n" << "i = " << i << "\nx = " << x << '\n' << "str1 = " << str1 << "\nj = " << j << '\n' << "y = " << y << "\nstr2 = " << str2 << '\n' << std::hex << "warr[0] = U+" << warr[0] << " warr[1] = U+" << warr[1] << '\n'; }
Output:
Converted 7 fields: i = 25 x = 5.432 str1 = Thompson j = 56 y = 789 str2 = 56 warr[0] = U+df warr[1] = U+6c34
See also
(C++11)(C++11)(C++11) | reads formatted input from stdin , a file stream or a bufferusing variable argument list (function) |
gets a character string from a file stream (function) |
|
(C++11) | prints formatted output to stdout , a file stream or a buffer (function) |
(C++17) | converts a character sequence to an integer or floating-point value (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/io/c/scanf