Title: 3. FORMATTED INPUTOUTPUT
13. FORMATTED INPUT/OUTPUT
2The printf Function
- The first argument in a call of printf is a
string, which may contain both ordinary
characters and conversion specifications, which
begin with the symbol. - Ordinary characters are printed as they appear in
the string conversion specifications are matched
one-by-one with the remaining arguments in the
call of printf - int i, j
- float x, y
- printf("i d, j d, x f, y f\n",
- i, j, x, y)
3The printf Function
- Warning C compilers dont check that the number
of conversion specifications in a format string
matches the number of output items - printf("d d\n", i) / too few items /
- printf("d\n", i, j) / too many items /
- Furthermore, theres no check that a conversion
specification is appropriate for the type of item
being printed - printf("f d\n", i, x)
4Conversion Specifications
- A conversion specification has the form -m.pX
- m (optional) specifies the minimum field width.
- - (optional) indicates left justification
within the field the default is right
justification. - .p (optional) specifies
- Number of digits after the decimal point (for a
floating point number) - Minimum number of digits to print (for an integer)
5Conversion Specifications
- X is one of the following letters
- d - decimal signed integer
- e - exponential floating point
- f - fixed decimal floating point
- g - whichever of e or f produces a shorter
string - This is not a complete description of conversion
specifications.
6printf Example
Sample program include ltstdio.hgt int
main(void) int i float f i 40 f
839.21 printf("d5d-5d5.3d\n", i, i,
i, i) printf("10.3f10.3e-10g\n", f, f,
f) return 0 Output 40 4040
040 839.210 8.392e02839.21
7Escape Sequences
- String literals sometimes need to contain control
characters (such as tab and newline) or
characters that have a special meaning in C (such
as "). These characters can be represented by
escape sequences. - Character escapes consist of \ followed by one
character - alert (bell) \a backslash \\
- backspace \b question mark \?
- form feed \f single quote \'
- new-line \n double quote \"
- carriage return \r
- horizontal tab \t
- vertical tab \v
8Escape Sequences
- Writing the \a escape causes a beep.
- Writing the \n escape causes the cursor to move
to the beginning of the next line. - Writing the \t escape causes the cursor to move
to the next tab stop. - The \" escape allows us to print the double
quote character printf("\"Hello!\"") - String literals may contain any number of escape
sequences - printf("Item\tUnit\tPurchase\n\tPrice\tDate\n")
9The scanf Function
- scanf requires a format string, followed by
variables into which input is to be stored. In
most cases, each variable must be preceded by the
symbol . - Warning Forgetting to put the symbol in
front of a variable will have unpredictable and
possibly disastrous results.
10The scanf Function
scanf format strings are similar to printf
format strings, but usually contain only
conversion specifications int i, j float
x, y scanf("ddff", i, j, x, y)
Note When used with scanf, the e, f, and g
conversions are identical each causes scanf to
read a floating-point number. A sign, exponent,
and decimal point may or may not be present.
11How scanf Works
scanf ignores white-space characters (blanks,
tabs, and new-line characters) when searching for
an input item. If scanf is used in the following
way scanf("ddff", i, j, x, y) the
input could be split over several lines 1 -20
.3 -4.0e3 or put on a single line 1 -20 .3
-4.0e3
12How scanf Works
When scanf encounters a character that cant
be part of the current item, this character is
read again during the scanning of the next input
item or during the next call of scanf. Using the
same call of scanf as above scanf("ddff",
i, j, x, y) If the input is
1-20.3-4.0e3z Then i is assigned the value
1, j is 20, x is .3, and
y is 4.0e3.
13The scanf Format String
A scanf format string may contain ordinary
characters in addition to conversion
specifications. A non-white-space character in
a format string must match the next input
character or scanf terminates without reading
further. (The non-matching character can be read
by a later call of scanf.) The call scanf("d/d/
d", month, day, year) will read 5/ 28/
2002 but not 5 / 28 / 2002
14The scanf Format String
A white-space character in a format string
matches zero or more white-space characters in
the input. The call scanf("d /d /d", month,
day, year) will read 5 / 28 / 2002 and all
similar inputs, regardless of the amount of space
before and after each / symbol.
15The scanf Format String
-
- Warning Putting a new-line character at the end
of a scanf format string is usually a bad idea - scanf("d\n", i)
- After reading an integer, scanf skips
white-space characters until it finds a
non-white-space character. An interactive program
will hang until the user enters a nonblank
character.