scanf, fscanf, sscanf
Defined in header
<stdio.h>
|
||
(1) | ||
int scanf( const char *format, ... );
|
(until C99) | |
int scanf( const char *restrict format, ... );
|
(since C99) | |
(2) | ||
int fscanf( FILE *stream, const char *format, ... );
|
(until C99) | |
int fscanf( FILE *restrict stream, const char *restrict format, ... );
|
(since C99) | |
(3) | ||
int sscanf( const char *buffer, const char *format, ... );
|
(until C99) | |
int sscanf( const char *restrict buffer, const char *restrict format, ... );
|
(since C99) | |
Reads data from the a variety of sources, interprets it according to format
and stores the results into given locations.
stream
buffer
Contents |
[edit] 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 whitespace characters (any single whitespace character in the format string consumes all available consecutive whitespace characters from the input), non-whitespace characters except
The following format specifiers are available:
All conversion specifiers other than The conversion specifiers The conversion specifiers The correct conversion specifications for the fixed-width character types (int8_t, etc) are defined in the header <cinttypes>.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... | - | receiving arguments |
[edit] Return value
Number of receiving arguments successfully assigned, or EOF if read failure occurs before the first receiving argument was assigned.
[edit] Example
#include <stdio.h> #include <stddef.h> #include <stdlib.h> #include <locale.h> int main(void) { // prepare a file, filled with numbers, squares, and factorials FILE *fp = fopen("results.dat", "w"); if (fp == NULL) { perror("couldn't open results.dat for writing: "); return EXIT_FAILURE; } int product = 1; for (int i=1; i<=10; ++i) { fprintf(fp, "i=%d, i^2=%d, factorial(%d)=%d\n", i, i*i, i, product*=i); } fclose(fp); // now parse the file with fscanf() fp = fopen("results.dat", "r"); if (fp == NULL) { perror("couldn't open results.dat for reading: "); return EXIT_FAILURE; } int n, sq, fact; while (fscanf(fp, "i=%d, i^2=%d, factorial(%*d)=%d ", &n, &sq, &fact) == 3) { printf("factorial(%d) = %d\n", n, fact); } fclose(fp); // sample string to parse with sscanf() char input[] = "25 54.32E-1 Thompson 56789 0123 56ß水"; /* parse as follows: an integer, a floating-point value, a word, two-digit integer (digits 5 and 6) a floating-point value (digits 7, 8, 9) an integer which isn't stored anywhere a string of integers (digits 5 and 6) two wide characters, using multibyte to wide conversion */ int i, j; float x, y; char str1[10], str2[4]; wchar_t warr[2]; setlocale(LC_ALL, "en_US.utf8"); 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]); return EXIT_SUCCESS; }
Output:
factorial(1) = 1 factorial(2) = 2 factorial(3) = 6 factorial(4) = 24 factorial(5) = 120 factorial(6) = 720 factorial(7) = 5040 factorial(8) = 40320 factorial(9) = 362880 factorial(10) = 3628800 Converted 7 fields: i = 25 x = 5.432000 str1 = Thompson j = 56 y = 789.000000 str2 = 56 warr[0] = U+df warr[1] = U+6c34
[edit] See also
(C99)(C99)(C99)
|
reads formatted input from stdin, a file stream or a buffer using variable argument list (function) |
gets a character string from a file stream (function) |
|
prints formatted output to stdout, a file stream or a buffer (function) |
|
C++ documentation for scanf, fscanf, sscanf
|