C Library Function - fscanf()
C Standard Library - <stdio.h>
Description
The C library function int fscanf(FILE *stream, const char *format, ...) reads formatted input from the stream.
Declaration
Here is the declaration for the fscanf() function.
int fscanf(FILE *stream, const char *format, ...)
Parameters
stream -- This is a pointer to a FILE object that identifies the stream.
format -- This is a C string that contains one or more of the following items: whitespace character, non-whitespace character and format specifiers. [=%[*][width][modifiers]type=], explained below:
Parameter | Description |
---|---|
* | An optional asterisk, indicating that data is read from the stream but ignored, i.e., it is not stored in the corresponding argument. |
width | Specifies the maximum number of characters to be read in the current read operation. |
modifiers | Specifies a size different from int (for d, i, and n), unsigned int (for o, u, and x), or float (for e, f, and g) for the corresponding additional argument: |
h: short int (for d, i, and n), or unsigned short int (for o, u, and x) l: long int (for d, i, and n), or unsigned long int (for o, u, and x), or double (for e, f, and g) L: long double (for e, f, and g) | | type | A character specifying the type of data to be read and how it is expected to be read. See the next table. |
fscanf Type Specifiers:
Type | Qualified Input | Argument Type |
---|---|---|
c | Single character: reads the next character. If a width different from 1 is specified, the function reads width characters and stores them in the array passed as argument, leaving no trailing null character. | char * |
d | Decimal integer: the prefix + or - is optional. | int * |
e,E,f,g,G | Floating point: includes a decimal point, an optional sign, an optional e or E, and a decimal number. Valid examples: -732.103 and 7.12e4 | float * |
o | Octal integer. | int * |
s | String: reads consecutive characters until a whitespace is found. | char * |
u | Unsigned decimal integer. | unsigned int * |
x,X | Hexadecimal integer. | int * |
- Additional arguments -- Depending on the format string, the function may expect a sequence of additional arguments, each containing one value to be inserted instead of each %-tag specified in the format parameter, if any. There should be the same number of these arguments as the number of %-tags.
Return Value
On success, the function returns the number of items successfully matched and assigned. If the end of the file is reached or a read error occurs, EOF is returned.
Example
The following example demonstrates the use of the fscanf() function.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1[10], str2[10], str3[10];
int year;
FILE * fp;
fp = fopen ("file.txt", "w+");
fputs("We are in 2014", fp);
rewind(fp);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
printf("Read String1 |%s|\n", str1 );
printf("Read String2 |%s|\n", str2 );
printf("Read String3 |%s|\n", str3 );
printf("Read Integer |%d|\n", year );
fclose(fp);
return(0);
}
Let's compile and run the above program, which will produce the following result:
Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2014|