9
C Formatted Input/Output
1
© 2007 Pearson Education, Inc. All rights reserved.
2
All the news that’s fit to print.
What mad pursuit? What struggle to escape?
Remove not the landmark on the boundary�of the fields.
© 2007 Pearson Education, Inc. All rights reserved.
OBJECTIVES
In this chapter you will learn:
3
© 2007 Pearson Education, Inc. All rights reserved.
9.1 Introduction
9.2 Streams
9.3 Formatting Output with printf
9.4 Printing Integers
9.5 Printing Floating-Point Numbers
9.6 Printing Strings and Characters
9.7 Other Conversion Specifiers
9.8 Printing with Field Widths and Precision
9.9 Using Flags in the printf Format Control String
9.10 Printing Literals and Escape Sequences
9.11 Reading Formatted Input with scanf
4
© 2007 Pearson Education, Inc. All rights reserved.
9.1 Introduction
5
© 2007 Pearson Education, Inc. All rights reserved.
9.2 Streams
6
© 2007 Pearson Education, Inc. All rights reserved.
9.3 Formatting Output with printf
7
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.1
Forgetting to enclose a format-control-string in quotation marks is a syntax error.
8
© 2007 Pearson Education, Inc. All rights reserved.
Good Programming Practice 9.1
Format outputs neatly for presentation to make program outputs more readable and reduce user errors.
9
© 2007 Pearson Education, Inc. All rights reserved.
9.4 Printing Integers
10
© 2007 Pearson Education, Inc. All rights reserved.
11
Fig. 9.1 | Integer conversion specifiers.
© 2007 Pearson Education, Inc. All rights reserved.
12
Outline
fig09_02.c
(1 of 2 )
d and i specify signed integers
h specifies a short number
l specifies a long number
o specifies an octal integer
u specifies an unsigned integer
© 2007 Pearson Education, Inc. All rights reserved.
13
Outline
fig09_02.c
(2 of 2 )
x and X specify hexadecimal integers
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.2
Printing a negative value with a conversion specifier that expects an unsigned value.
14
© 2007 Pearson Education, Inc. All rights reserved.
9.5 Printing Floating-Point Numbers
15
© 2007 Pearson Education, Inc. All rights reserved.
16
Fig. 9.3 | Floating-point conversion specifiers.
© 2007 Pearson Education, Inc. All rights reserved.
Error-Prevention Tip 9.1
When outputting data, be sure that the user is aware of situations in which data may be imprecise due to formatting (e.g., rounding errors from specifying precisions).
17
© 2007 Pearson Education, Inc. All rights reserved.
18
Outline
fig09_04.c
e and E specify exponential notation
f specifies fixed-point notation
g and G specify either exponential or fixed-point notation depending on the number’s size
© 2007 Pearson Education, Inc. All rights reserved.
9.6 Printing Strings and Characters
19
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.3
Using %c to print a string is an error. The conversion specifier %c expects a char argument. A string is a pointer to char (i.e., a char *).
20
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.4
Using %s to print a char argument, on�some systems, causes a fatal execution-time error called an access violation. The conversion specifier %s expects an argument of type pointer to char.
21
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.5
Using single quotes around character strings is a syntax error. Character strings must be enclosed in double quotes.
22
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.6
Using double quotes around a character constant creates a pointer to a string consisting of two characters, the second of which is the terminating null. A character constant is a single character enclosed in single quotes.
23
© 2007 Pearson Education, Inc. All rights reserved.
24
Outline
fig09_05.c
c specifies a character will be printed
s specifies a string will be printed
© 2007 Pearson Education, Inc. All rights reserved.
9.7 Other Conversion Specifiers
25
© 2007 Pearson Education, Inc. All rights reserved.
Portability Tip 9.1
The conversion specifier p displays an address in an implementation-defined manner (on many systems, hexadecimal notation is used rather than decimal notation).
26
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.7
Trying to print a literal percent character using % rather than %% in the format control string. When % appears in a format control string, it must be followed by a conversion specifier.
27
© 2007 Pearson Education, Inc. All rights reserved.
28
Fig. 9.6 | Other conversion specifiers.
© 2007 Pearson Education, Inc. All rights reserved.
29
Outline
fig09_07.c
(1 of 2 )
p specifies a memory address will be printed
n stores the number of characters printed on a line
% prints a percent sign
© 2007 Pearson Education, Inc. All rights reserved.
30
Outline
fig09_07.c
(2 of 2 )
© 2007 Pearson Education, Inc. All rights reserved.
9.8 Printing with Field Widths and Precision
31
© 2007 Pearson Education, Inc. All rights reserved.
32
Outline
fig09_08.c
(1 of 2 )
A field width of 4 will make C attempt to print the number in a 4-character space
Note that C considers the minus sign a character
© 2007 Pearson Education, Inc. All rights reserved.
33
Outline
fig09_08.c
(2 of 2 )
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.8
Not providing a sufficiently large field�width to handle a value to be printed can offset other data being printed and can produce confusing outputs. Know your data!
34
© 2007 Pearson Education, Inc. All rights reserved.
9.8 Printing with Field Widths and Precision
If data too small, prefixed with zeros
For g – maximum number of significant digits
%.3f
35
© 2007 Pearson Education, Inc. All rights reserved.
36
Outline
fig09_09.c
(1 of 2 )
Precision for integers specifies the minimum number of characters to be printed
Precision for f and e specifiers controls the number of digits after the decimal point
Precision for the g specifier controls the maximum number of significant digits printed
© 2007 Pearson Education, Inc. All rights reserved.
37
Outline
fig09_09.c
(2 of 2 )
Precision for strings specifies the maximum number of characters to be printed
© 2007 Pearson Education, Inc. All rights reserved.
9.9 Using Flags in the printf Format Control String
38
© 2007 Pearson Education, Inc. All rights reserved.
39
Fig. 9.10 | Format control string flags.
© 2007 Pearson Education, Inc. All rights reserved.
40
Outline
fig09_11.c
- flag left justifies characters in a field
© 2007 Pearson Education, Inc. All rights reserved.
41
Outline
fig09_12.c
+ flag forces a plus sign on positive numbers
© 2007 Pearson Education, Inc. All rights reserved.
42
Outline
fig09_13.c
Space flag forces a space on positive numbers
© 2007 Pearson Education, Inc. All rights reserved.
43
Outline
fig09_14.c
# flag prefixes a 0 before octal integers
# flag prefixes a 0x before hexadecimal integers
# flag forces a decimal point on floating-point numbers with no fractional part
© 2007 Pearson Education, Inc. All rights reserved.
44
Outline
fig09_15.c
0 flag fills empty spaces with zeros
© 2007 Pearson Education, Inc. All rights reserved.
9.10 Printing Literals and Escape Sequences
45
© 2007 Pearson Education, Inc. All rights reserved.
Common Programming Error 9.9
Attempting to print as literal data in a printf statement a single quote, double quote or backslash character without preceding that character with a backslash to form a proper escape sequence is an error.
46
© 2007 Pearson Education, Inc. All rights reserved.
47
Fig. 9.16 | Escape sequences.
© 2007 Pearson Education, Inc. All rights reserved.
9.11 Formatting Input with scanf
48
© 2007 Pearson Education, Inc. All rights reserved.
Good Programming Practice 9.2
When inputting data, prompt the user for one data item or a few data items at a time. Avoid asking the user to enter many data items in response to a single prompt.
49
© 2007 Pearson Education, Inc. All rights reserved.
Good Programming Practice 9.3
Always consider what the user and your program will do when (not if) incorrect data is entered—for example, a value for an integer that is nonsensical in a program’s context, or a string with missing punctuation or spaces.
50
© 2007 Pearson Education, Inc. All rights reserved.
51
Fig. 9.17 | Conversion specifiers for scanf. (Part 1 of 3.)
© 2007 Pearson Education, Inc. All rights reserved.
52
Fig. 9.17 | Conversion specifiers for scanf. (Part 2 of 3.)
© 2007 Pearson Education, Inc. All rights reserved.
53
Fig. 9.17 | Conversion specifiers for scanf. (Part 3 of 3.)
© 2007 Pearson Education, Inc. All rights reserved.
54
Outline
fig09_18.c
d specifies a decimal integer will be input
i specifies an integer will be input
o specifies an octal integer will be input
u specifies an unsigned decimal integer will be input
x specifies a hexadecimal integer will be input
© 2007 Pearson Education, Inc. All rights reserved.
55
Outline
fig09_19.c
e, f, and g specify a floating-point number will be input
l specifies a double or long double will be input
© 2007 Pearson Education, Inc. All rights reserved.
56
Outline
fig09_20.c
c specifies a character will be input
s specifies a string will be input
© 2007 Pearson Education, Inc. All rights reserved.
57
Outline
fig09_21.c
[] specifies only the initial segment of a string that contains the characters in brackets will be read
© 2007 Pearson Education, Inc. All rights reserved.
58
Outline
fig09_22.c
[] and ^ specify only the initial segment of a string that does not contain the characters in brackets will be read
© 2007 Pearson Education, Inc. All rights reserved.
59
Outline
fig09_23.c
A field width of 2 tells C to only read the first 2 characters of that input
© 2007 Pearson Education, Inc. All rights reserved.
60
Outline
fig09_24.c
* is a wildcard—scanf will disregard anything between the two inputs on either side of it
© 2007 Pearson Education, Inc. All rights reserved.