Title: Chapter 9 Formatted InputOutput
1Chapter 9 - Formatted Input/Output
Outline 9.1 Introduction 9.2 Streams 9.3 Format
ting 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
Precisions 9.9 Using Flags in the printf
Format-Control String 9.10 Printing Literals and
Escape Sequences 9.11 Formatting Input with
scanf
2Objectives
- In this chapter, you will learn
- To understand input and output streams.
- To be able to use all print formatting
capabilities. - To be able to use all input formatting
capabilities.
39.1 Introduction
- In this chapter
- Presentation of results
- scanf and printf
- Streams (input and output)
- gets, puts, getchar, putchar (in ltstdio.hgt)
49.2 Streams
- Streams
- Sequences of characters organized into lines
- Each line consists of zero or more characters and
ends with newline character - ANSI C must support lines of at least 254
characters - Performs all input and output
- Can often be redirected
- Standard input keyboard
- Standard output screen
- Standard error screen
- More in Chapter 11
59.3 Formatting Output with printf
- printf
- Precise output formatting is accomplished with
printf - A printf call contains a format control string
that describes output format. Format control
string consists of - Conversion specifications Conversion specifier
(), flags, field widths, precisions, and literal
Characters. - Can perform rounding, aligning columns,
right/left justification, inserting literal
characters, exponential format, hexadecimal
format, and fixed width and precision - Format
- printf( format-control-string, other-arguments )
- Format control string describes output format
- Other-arguments correspond to each conversion
specification in format-control-string - Each specification begins with a percent sign(),
ends with conversion specifier
69.4 Printing Integers
79.4 Printing Integers
- Integer
- Whole number (no decimal point) 25, 0, -9
- Positive, negative, or zero
- Only minus sign prints by default (later we shall
change this)
8Program Output
- 455
- 455
- 455
- -455
- 32000
- 2000000000
- 707
- 455
- 4294966841
- 1c7
- 1C7
7x800x817x827x10_7x647448455
7x160Cx1611x1627x112x162567192256455
99.5 Printing Floating-Point Numbers
- Floating Point Numbers
- Have a decimal point (33.5)
- Exponential notation (computer's version of
scientific notation) - 150.3 is 1.503 x 10² in scientific
- 150.3 is 1.503E02 in exponential (E stands for
exponent) - use e or E
- f print floating point with at least one digit
to left of decimal - g (or G) - prints in f or e with no trailing
zeros (1.2300 becomes 1.23) - Use exponential if exponent less than -4, or
greater than or equal to precision (6 digits by
default)
109.5 Printing Floating-Point Numbers
11- fig09_04.c
- Program Output
- 1.234568e006
- 1.234568e006
- -1.234568e006
- 1.234568E006
- 1234567.890000
- 1.23457e006
- 1.23457E006
129.6 Printing Strings and Characters
- c
- Prints char argument
- Cannot be used to print the first character of a
string - s
- Requires a pointer to char as an argument
- Prints characters until NULL ('\0') encountered
- Cannot print a char argument
- Remember
- Single quotes for character constants ('z')
- Double quotes for strings "z" (which actually
contains two characters, 'z' and '\0')
13A This is a string This is a string This is also
a string
149.7 Other Conversion Specifiers
- p
- Displays pointer value (address)
- n
- Stores number of characters already output by
current printf statement - Takes a pointer to an integer as an argument
- Nothing printed by a n specification
- Every printf call returns a value
- Number of characters output
- Negative number if error occurs
-
- Prints a percent sign
159.7 Other Conversion Specifiers
16Program Output
The value of ptr is 0012FF78 The address of x is
0012FF78 Â Total characters printed on this line
38 Â This line has 28 characters 28 characters
were printed  Printing a in a format control
string
179.8 Printing with Field Widths and Precisions
- Field width
- Size of field in which data is printed
- If width larger than data, default right
justified - If field width too small, increases to fit data
- Minus sign uses one character position in field
- Integer width inserted between and conversion
specifier - 4d field width of 4
189.8 Printing with Field Widths and Precisions
- Precision
- Meaning varies depending on data type
- Integers (default 1)
- Minimum number of digits to print
- If data too small, prefixed with zeros
- Floating point
- Number of digits to appear after decimal (e and
f) - For g maximum number of significant digits
- Strings
- Maximum number of characters to be written from
string - Format
- Use a dot (.) then precision number after
- .3f
199.8 Printing with Field Widths and Precisions
- Field width and precision
- Can both be specified
- width.precision
- 5.3f
- Negative field width left justified
- Positive field width right justified
- Precision must be positive
- Can use integer expressions to determine field
width and precision values - Place an asterisk () in place of the field width
or precision - Matched to an int argument in argument list
- Example
- printf( ".f", 7, 2, 98.736 )
- Uses 7 for the field width, 2 for the precision
and outputs the value 98.74 right justified.
20Program Output
- 1
- 12
- 123
- 1234
- 12345
-
- -1
- -12
- -123
- -1234
- -12345
21 22 Using precision for integers 0873
000000873 Using precision for floating-point
numbers 123.945 1.239e002
124 Using precision for strings Happy
Birth
239.9 Using Flags in the printfFormat-Control
String
- Flags
- Supplement formatting capabilities
- Place flag immediately to the right of percent
sign - Several flags may be combined
24- fig09_11.c
- Program Output
hello 7 a 1.230000 Â hello
7 a 1.230000
25- fig09_12.c
- Program Output
786 -786 786 -786
26- fig09_13.c
- Program Output
547 -547
27- fig09_14.c
- Program Output
02623 0x593 0X593 Â 1427 1427.00
28- fig09_15.c
- Program Output
00000452 000000452
299.10 Printing Literals and Escape Sequences
- Printing Literals
- Most characters can be printed
- Certain "problem" characters, such as the
quotation mark " - Must be represented by escape sequences
- Represented by a backslash \ followed by an
escape character
309.10 Printing Literals and Escape Sequences
31scanf
- Important Topics
- Conversion specifiers for scanf Table of Fig
9.17 - Example Fig 9.18, i d (i can read
decimal/oct/hex) - Example Fig 9.19 Floating-point conversion
specifiers (e/E, g/G, f) scanf using le, lf, lg
and printing using f - Example Fig 9.20 Reading char string using c
s - Scan set scanf (, z)Example Fig 9.21 A
set of characters enclosed in , preceded by the
- Inverted scan set using caret sign (,
z) Example Fig 9.22 - Field width Example Fig 9.23
- Assignment suppression character c
329.11 Formatting Input with scanf
339.11 Formatting Input with scanf
349.11 Formatting Input with scanf
- scanf
- Input formatting
- Capabilities
- Input all types of data
- Input specific characters
- Skip specific characters
- Format
- scanf(format-control-string, other-arguments)
- Format-control-string
- Describes formats of inputs
- Other-arguments
- Pointers to variables where input will be stored
- Can include field widths to read a specific
number of characters from the stream
359.11 Formatting Input with scanf
- Scan sets
- Set of characters enclosed in square brackets
- Preceded by sign
- Scans input stream, looking only for characters
in scan set - Whenever a match occurs, stores character in
specified array - Stops scanning once a character not in the scan
set is found - Inverted scan sets
- Use a caret aeiou
- Causes characters not in the scan set to be
stored - Skipping characters
- Include character to skip in format control
- Or, use (assignment suppression character)
- Skips any type of character without storing it
36- fig09_18.c
- Program Output
Enter seven integers -70 -70 070 0x70 70 70
70 The input displayed as decimal integers
is -70 -70 56 112 56 70 112
37Enter three floating-point numbers 1.27987
1.27987e03 3.38476e-06 Here are the numbers
entered in plain floating-point
notation 1.279870 1279.870000 0.000003
38- fig09_20.c
- Program Output
Enter a string Sunday The input was the
character "S" and the string "unday"
39- fig09_21.c
- Program Output
Enter string ooeeooahah The input was "ooeeooa"
40- fig09_22.c
- Program Output
Enter a string String The input was "Str"
41- fig09_23.c
- Program Output
Enter a six digit integer 123456 The integers
input were 12 and 3456
42Enter a date in the form mm-dd-yyyy
11-18-2003 month 11 day 18 year
2003 Â Enter a date in the form mm/dd/yyyy
11/18/2003 month 11 day 18 year 2003