scanf, wscanf
Remonter à Stdio.h - Index
Header File
stdio.h
Category
Console I/O Routines
Prototype
int scanf(const char *format[, address, ...]);
int wscanf(const wchar_t *format[, address, ...]);
Description
Scans and formats input from the stdin
stream.
Note: For Win32 and Win64 GUI applications,
stdin
must be redirected.
The scanf
function:
- Scans a series of input fields one character at a time.
- Formats each field according to a corresponding format specifier passed in the format string
*format
. vsscanf
scans and formats input from a string, using an argument list.
There must be one format specifier and address for each input field.
scanf
might stop scanning a particular field before it reaches the normal end-of-field (whitespace) character, or it might terminate entirely. For details about why this might happen, see When ...scanf Stops Scanning.
Note:
scanf
can lead to unexpected results if you diverge from an expected pattern. You must provide information that tellsscanf
how to synchronize at the end of a line.
The combination of gets or fgets followed by sscanf is safe and easy, and therefore recommended over scanf
.
Return Value
On success, scanf
returns the number of input fields successfully scanned, converted, and stored. The return value does not include scanned fields that were not stored.
On error:
- If no fields were stored, scanf returns 0.
- If scanf attempts to read at end-of-file or at end-of-string, it returns EOF.
More About scanf
Example
#include <stdio.h> int main(void) { char label[20]; char name[20]; int entries = 0; int loop, age; double salary; struct Entry_struct { char name[20]; int age; float salary; } entry[20]; /* Input a label as a string of characters restricting to 20 characters */ printf("\n\nPlease enter a label for the chart: "); scanf("%20s", label); fflush(stdin); /* flush the input stream in case of bad input */ /* Input number of entries as an integer */ printf("How many entries will there be? (less than 20) "); scanf("%d", &entries); fflush(stdin); /* flush the input stream in case of bad input */ /* input a name restricting input to only letters uppercase or lowercase */ for (loop=0;loop<entries;++loop) { printf("Entry %d\n", loop); printf(" Name : "); scanf("%[A-Za-z]", entry[loop].name); fflush(stdin); /* flush the input stream in case of bad input */ /* input an age as an integer */ printf(" Age : "); scanf("%d", &entry[loop].age); fflush(stdin); /* flush the input stream in case of bad input */ /* input a salary as a float */ printf(" Salary : "); scanf("%f", &entry[loop].salary); fflush(stdin); /* flush the input stream in case of bad input */ } /* Input a name, age, and salary as a string, integer, and double */ printf("\nPlease enter your name, age and salary\n"); scanf("%20s %d %lf", name, &age, &salary); /* Print out the data that was input */ printf("\n\nTable %s\n",label); printf("Compiled by %s age %d $%15.2lf\n", name, age, salary); printf("-----------------------------------------------------\n"); for (loop=0;loop<entries;++loop) printf("%4d | %-20s | %5d | %15.2lf\n", loop + 1, entry[loop].name, entry[loop].age, entry[loop].salary); printf("-----------------------------------------------------\n"); return 0; }
See Also
- scanf Format Specifiers
- scanf Format String
- Input Fields for scanf functions
- When ...scanf Stops Scanning
- Format Specifier Conventions
- Format Specifiers in C/C++
- Extended Types Formatted I/O
- Unicode Input Format Specifiers
- Argument Suppression
- Pointer-size and Argument-type Modifiers
- gets, _getws
- fgets, fgetws