SCANF(3S) UNIX Programmer's Manual SCANF(3S) NAME scanf, fscanf, sscanf - formatted input conversion, read from stream file SYNOPSIS #include scanf (format [ , pointer ] ... ) char *format; fscanf (stream, format [ , pointer ] ... ) FILE *stream; char *format; sscanf (s, format [ , pointer ] ... ) char *s, *format; HP-UX COMPATIBILITY Level: HP-UX/RUN ONLY Origin: System V DESCRIPTION _S_c_a_n_f reads from the standard input stream _s_t_d_i_n. _F_s_c_a_n_f reads from the named input _s_t_r_e_a_m. _S_s_c_a_n_f reads from the character string _s. Each function reads characters, inter- prets them according to a format, and stores the results in its arguments. Each expects, as arguments, a control string _f_o_r_m_a_t described below, and a set of _p_o_i_n_t_e_r arguments indi- cating where the converted input should be stored. The control string usually contains conversion specifica- tions, which are used to direct interpretation of input sequences. The control string may contain: 1. Blanks, tabs, or new-lines, which cause input to be read up to the next non-white-space character. 2. An ordinary character (not %), which must match the next character of the input stream. 3. Conversion specifications, consisting of the character %, an optional assignment suppressing character *, an optional numerical maximum field width, and a conversion character. A conversion specification directs the conversion of the next input field; the result is placed in the variable pointed to by the corresponding argument, unless assignment suppression was indicated by *. An input field is defined as a string of non-space characters; it extends to the next inappropriate character or until the field width, if speci- fied, is exhausted. The conversion character indicates the interpretation of the input field; the corresponding pointer argument must usually be of a restricted type. The following conversion charac- ters are legal: % a single % is expected in the input at this point; no assignment is done. d a decimal integer is expected; the corresponding argu- ment should be an integer pointer. o an octal integer is expected; the corresponding argu- ment should be an integer pointer. x a hexadecimal integer is expected; the corresponding argument should be an integer pointer. s a character string is expected; the corresponding argu- ment should be a character pointer pointing to an array of characters large enough to accept the string and a terminating \0, which will be added automatically. The input field is terminated by a space character or a new-line. Note that _s_c_a_n_f will not read a null string. c a character is expected; the corresponding argument should be a character pointer. The normal skip over space characters is suppressed in this case; to read the next non-space character, use %1s. If a field width is given, the corresponding argument should refer to a character array; the indicated number of charac- ters is read. e,f a floating point number is expected; the next field is converted accordingly and stored through the corresponding argument, which should be a pointer to a _f_l_o_a_t. The input format for floating point numbers is an optionally signed string of digits, possibly con- taining a decimal point, followed by an optional exponent field consisting of an E or an e, followed by an optionally signed integer. [ indicates a string that is not to be delimited by space characters. The left bracket is followed by a set of characters and a right bracket; the characters between the brackets define a set of characters making up the string. If the first character is not a circumflex (^), the input field consists of all characters up to the first character that is not in the set between the brackets; if the first character after the left bracket is a ^, the input field consists of all characters up to the first character that is in the set of the remaining characters between the brackets. The corresponding argument must point to a character array. The conversion characters d, o, and x may be capitalized and/or preceded by l to indicate that a pointer to long rather than to int is in the argument list. Similarly, the conversion characters e and f may be capitalized and/or pre- ceded by l to indicate that a pointer to double rather than to float is in the argument list. The character h, simi- larly, indicates short data items. _S_c_a_n_f conversion terminates at EOF, at the end of the con- trol string, or when an input character conflicts with the control string. In the latter case, the offending character is left unread in the input stream. _S_c_a_n_f returns the number of successfully matched and assigned input items; this number can be zero in the event of an early conflict between an input character and the con- trol string. If the input ends before the first conflict or conversion, EOF is returned. Trailing white space (including a new-line) is left unread unless matched in the _f_o_r_m_a_t. EXAMPLES The call: int i; float x; char name[50]; scanf ("%d%f%s", &i, &x, name); with the input line: 25 54.32E-1 thompson will assign to _i the value 25, to _x the value 5.432, and _n_a_m_e will contain thompson\0. Or: int i; float x; char name[50]; scanf ("%2d%f%*d %[1234567890]", &i, &x, name); with input: 56789 0123 56a72 will assign 56 to _i, 789.0 to _x, skip 0123, and place the string 56\0 in _n_a_m_e. The next call to _g_e_t_c_h_a_r (see _g_e_t_c(3S)) will return a. SEE ALSO atof(3C), getc(3S), printf(3S). DIAGNOSTICS These functions return EOF on end of input and a short count for missing or illegal data items. BUGS The success of literal matches and suppressed assignments is not directly determinable.