3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string,...

15
3. FORMATTED INPUT/OUTPUT

Transcript of 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string,...

Page 1: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

3. FORMATTED INPUT/OUTPUT

Page 2: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The 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);

Page 3: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The printf Function• Warning: C compilers don’t 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, there’s no check that a conversion specification is appropriate for the type of item being printed:

printf("%f %d\n", i, x);

Page 4: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

Conversion SpecificationsA 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)

Page 5: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

Conversion 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.

Page 6: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

printf Example• Sample program:

#include <stdio.h>int main(void) { int i; float f; i = 40; f = 839.21; printf("|%d|%5d|%-5d|%5.3d|\n", i, i, i, i); printf("|%10.3f|%10.3e|%-10g|\n", f, f, f); return 0;}

• Output:|40| 40|40 | 040|| 839.210| 8.392e+02|839.21 |

Page 7: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

Escape SequencesString 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

Page 8: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

Escape 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");

Page 9: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The 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.

Page 10: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The scanf Function

• scanf format strings are similar to printf format strings, but usually contain only conversion specifications:

int i, j; float x, y; scanf("%d%d%f%f", &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.

Page 11: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

How scanf Worksscanf 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("%d%d%f%f", &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

Page 12: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

How scanf Works

• When scanf encounters a character that can’t 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("%d%d%f%f", &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.

Page 13: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The 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 read5/ 28/ 2002

but not5 / 28 / 2002

Page 14: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The 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 read5 / 28 / 2002

and all similar inputs, regardless of the amount of space before and after each / symbol.

Page 15: 3. FORMATTED INPUT/OUTPUT. The printf Function The first argument in a call of printf is a string, which may contain both ordinary characters and conversion.

The 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.