t03ABasicIOPrintf - Basic I/O printf...

Info icon This preview shows page 1. Sign up to view the full content.

This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Basic I/O – printf() Dale Roberts Formatted Input/Output In this chapter Presentation of results scanf and printf scanf printf Streams (input and output) gets, puts, getchar, putchar (in <stdio.h>) puts getchar putchar <stdio.h> Sequences of characters organized into lines Each line consists of zero or more characters and ends with Each newline character newline ANSI C must support lines of at least 254 characters Performs all input and output Can often be redirected Standard input – keyboard Standard Standard output – screen Standard Standard error – screen Standard Streams Dale Roberts Formatting Output with printf Formatting printf printf Precise output formatting Conversion specifications: flags, field Conversion widths, precisions, etc. widths, Can perform rounding, aligning columns, Can right/left justification, inserting literal characters, exponential format, hexadecimal format, and fixed width and precision format, Dale Roberts Formatting Output with printf Formatting Format (cont.) (cont.) printf( format-control-string, otherarguments); Format control string: describes output format, Format Ordinary characters: copy to output stream: printf(“this is an output\n”); an Conversion specifications: leading with character ‘%’ Format: [-]: optional ⇒ left justification, if exists [w]: optional ⇒ minimal width (wider if necessary). The padding character is blank normally and zero if the field width was specified with a leading zero width [.]: optional ⇒ separates field w and p %-w.plx Dale Roberts Formatting Output with printf Formatting (cont.) (cont.) [p]: optional ⇒ maximum field width for a string ⇒ precision of floating number of [l]: long integer [x]:d ⇒ decimal signed integer i ⇒ decimal signed integer (the d and i specifiers are different when used in scanf) scanf u ⇒ decimal unsigned integer x ⇒ hexadecimal unsigned integer (0 – 9 and a – f) X ⇒ unsigned hexadecimal integer (0 – 9 and A – F) h or l ⇒ length modifiers; place before any integer length conversion specifier to indicate that a short or short long integer is displayed respectively long Dale Roberts h or l ⇒ length modifiers; place before any integer length conversion specifier to indicate that a short or long integer is displayed respectively short long o ⇒ octal unsigned integer f ⇒ floating pointer number g ⇒ either f or e, whichever is shorter c ⇒ single character s ⇒ character string e ⇒ exponential floating pointer number Other-arguments: correspond to each conversion specification in Other-arguments: format-control-string, such as variables. format-control-string, Dale Roberts Printing Integers – Whole number (no decimal point): 25, 0, -9 – Positive, negative, or zero – Only minus sign prints by default 1 /* Fig 9.2: fig09_02.c */ 2 /* Using the integer conversion specifiers */ 3 #include <stdio.h> 4 5 main() 6{ 7 printf( "%d\n", 455 ); 8 printf( "%i\n", 455 ); /* i same as d in printfprintf( "%d\n", +455 ); */ 9 10 printf( "%d\n", -455 ); 11 printf( "%hd\n", 32000 ); 12 printf( "%ld\n", 2000000000 ); 13 printf( "%o\n", 455 ); 14 printf( "%u\n", 455 ); 15 printf( "%u\n", -455 ); 16 printf( "%x\n", 455 ); 17 printf( "%X\n", 455 ); 18 19 20 } Example: Program Output 455 455 455 -455 32000 2000000000 707 455 65081 1c7 1C7 Dale Roberts Printing Floating-Point Numbers Floating Point Number Have a decimal point (33.5) Exponential notation Exponential (computer's version of scientific notation) scientific 150.3 is 1.503 x 10² 1.503 in scientific in 150.3 is 1.503E+02 in 1.503E+02 exponential (%E stands for exponential exponent) exponent) Can use %e or %E Can %e %E %f : print floating point with at least one digit to left of decimal decimal %g (or G) : prints in f or e prints with no trailing zeros (1.2300 becomes 1.23) 1.23 Use exponential if exponent Use less than -4, or greater than -4 or or equal to precision (6 digits or by default) by Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /* Fig 9.4: fig09_04.c */ /* Printing floating-point numbers with floating-point conversion specifiers */ #include <stdio.h> int main() { Program Output printf( "%e\n", 1234567.89 ); 1.234568e+006 printf( "%e\n", +1234567.89 ); 1.234568e+006 printf( "%e\n", -1234567.89 ); -1.234568e+006 printf( "%E\n", 1234567.89 ); 1.234568E+006 printf( "%f\n", 1234567.89 ); 1234567.890000 printf( "%g\n", 1234567.89 ); 1.23457e+006 1.23457E+006 printf( "%G\n", 1234567.89 ); 16 17 18 } return 0; Dale Roberts Printing Strings and Characters %c Prints char argument char Cannot be used to print Cannot the first character of a string string Requires a pointer to Requires char as an argument char (line 8) (line Cannot print a char Cannot char argument argument Prints characters until Prints NULL ('\0') NULL encountered encountered Single quotes for Single character constants ('z') Double quotes for strings Double "z" (which actually "z" contains two characters, 'z' and '\0') 'z' '\0' Example: 1 /* Fig 9.5: fig09_05c */ 2 /* Printing strings and characters */ 3 #include <stdio.h> 4 5 int main() 6{ 7 char character = 'A'; 8 char string = "This is a string"; 9 const char *stringPtr = "This is also a string"; 10 11 printf( "%c\n", character ); 12 printf( "%s\n", "This is a string" ); 13 printf( "%s\n", string ); 14 printf( "%s\n", stringPtr ); 15 16 return 0; 17 } %s A This is a string This is a string This is also a string Program Output Dale Roberts Other Conversion Specifiers %p Displays pointer value (address) %n Stores number of characters already output by current printf Stores printf statement statement Takes a pointer to an integer as an argument Nothing printed by a %n specification Nothing %n Every printf call returns a value Every printf Number of characters output Negative number if error occurs %% Prints a percent sign Prints percent Dale Roberts Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 &y 16 17 18 19 20 21 22 23 /* Fig 9.7: fig09_07.c */ Program Output /* Using the p, n, and % conversion specifiers */ The value of ptr is 0065FDF0 #include <stdio.h> The address of x is 0065FDF0 int main() { int *ptr; int x = 12345, y; Total characters printed on this line is: 41 This line has 28 characters 28 characters were printed Printing a % in a format control string ptr = &x; printf( "The value of ptr is %p\n", ptr ); printf( "The address of x is %p\n\n", &x ); printf( "Total characters printed on this line is:%n", ); printf( " %d\n\n", y ); y = printf( "This line has 28 characters\n" ); printf( "%d characters were printed\n\n", y ); printf( "Printing a %% in a format control string\n" ); return 0; } Dale Roberts 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 If field width too small, increases to fit data Minus sign uses one character position in field Integer width inserted between % and conversion specifier. Integer %4d : field width of 4 %4d Example: Example Precision (Meaning varies depending on data type) Precision Integers (default 1): Minimum number of digits to print, If data too small, Integers ): prefixed with zeros prefixed Floating point: Number of digits to appear after decimal (e and f). g : maximum number of significant digits maximum Strings: Maximum number of characters to be written from string Format: Use a dot (.) then precision number after % then Example: Example %.3f Dale Roberts Printing with Field Widths and Precisions (cont) (cont) Printing Field width and precision Can both be specified using format of Can %width.precision %width.precision Example: %5.3f Example: %5.3f Negative field width (-): left justified; Positive field ): width: right justified width: Precision must be positive Can use integer expressions to determine field width Can and precision values and Place an asterisk (*) in place of the field width or precision Matched to an int argument in argument list Matched int Example: printf( "%*.*f", 7, 2, 98.736 ); 98.736 Dale Roberts Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Program Output: /* Fig 9.9: fig09_09.c */ /* Using precision while printing integers,Using precision for integers 0873 floating-point numbers, and strings */ 000000873 #include <stdio.h> int main() { / int i = 873; * Initialize variables */ double f = 123.94536; char s = "Happy Birthday"; /* print */ Using precision for floating-point numbers 123.945 1.239e+02 124 Using precision for strings Happy Birth printf( "Using precision for integers\n" ); printf( "\t%.4d\n\t%.9d\n\n", i, i ); printf( "Using precision for floating-point numbers\n" ); 15 16 17 18 19 20 } printf( "\t%.3f\n\t%.3e\n\t%.3g\n\n", f, f, f ); printf( "Using precision for strings\n" ); printf( "\t%.11s\n", s ); return 0; Dale Roberts Using Flags in the printf Format-Control String Using Format-Control Flags Supplement formatting capabilities Place flag immediately to the right of percent sign Several flags may be combined Flag - (minus sign) + (plus sign) space Description Left justify the output within the specified field. Display a plus sign preceding positive values and a minus sign preceding negative values. Print a space before a positive value not printed with the + flag Prefix 0 to the output value when used with the octal conversion specifier Prefix 0x or 0X to the output value when used with the hexadecimal conversion specifiers x or X Force a decimal point for a floating point number printed with e, E, f, g, or G that does not contain a fractional part. (Normally the decimal point is only printed if a digit follows it.) For g and G specifiers, trailing zeros are not eliminated. Pad a field with leading zeros # 0 (zero) Dale Roberts Example: 1 /* Fig 9.11: fig09_11.c */ 2 /* Right justifying and left justifying values */ 3 #include <stdio.h> 4 5 int main() 6{ 7 printf( "%10s%10d%10c%10f\n\n", "hello", 7, 'a', 1.23 ); 8 printf( "%-10s%-10d%-10c%-10f\n", "hello", 7, 'a', 1.23 ); 0; 9 return 10 } Program Output: hello helloz“ºª ¸ 7 P7 Pa Pac 1.230000 P1.230000c Dale Roberts Example: 1 /* Fig 9.14: fig09_14.c */ 2 /* Using the # flag with conversion specifiers X and any floating-point 3 o, x, specifier */ stdio.h> 4 #include < 5 6 int main() 7{ 8 int c = 1427; 9 double p = 1427.0; 10 11 printf( "%#o\n", c ); 12 printf( "%#x\n", c ); 13 printf( "%#X\n", c ); 14 printf( "\n%g\n", p ); 15 printf( "%#g\n", p ); 16 17 return 0; 18 } Program Output: 02623 0x593 0X593 1427 1427.00 Dale Roberts Example: int i=1256; printf(“%d”,i); printf(“%5d”,i); printf(“%5d”,i); printf(“%05d”,i); printf(“%05d”,i); printf(“%x”,i); printf(“%x”,i); printf(“%-5d”,i); printf(“%-5d”,i); Example: float buf=125.12; printf(“%f”,buf); precision error) printf(“%.0f”,buf); printf(“%.0f”,buf); printf(“%7.2f”,buf); printf(“%07.2f”,buf); 4 5 5 3 5 characters characters characters characters characters characters characters characters characters 1256 c1256 È 01256 788 1256c È 125.119995 (floating number 125.119995 125 c125.12 È 0125.12 Example: char buf = “hello, world”; world”; printf(“%10s”,buf); hello, printf(“%-10s”,buf); printf(“%20s”,buf); s** ˆc#ºª È ª µé printf(“%20.10s”,buf); printf(“%-20.10s”,buf); hello, printf(“%.10s”,buf); world hello, world hello, world hello, ’ý hello, wor c* và È ª µé worc* và ’ý È ª µé hello, wor Dale Roberts 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 Table of all escape sequences Escape sequence \’ \” \? \\ \a \b \f \n \r \t \v Represented by a backslash \ followed by an escape character Represented Description Output the single quote (‘) character. Output the double quote (“) character. Output the question mark (?) character. Output the backslash (\) character. Cause an audible (bell) or visual alert Move the cursor back one position on the current line. Move the cursor to the start of the next logical page. Move the cursor to the beginning of the next line. Move the cursor to the beginning of the current line. Move the cursor to the next horizontal tab position Move the cursor to the next vertical tab position. Dale Roberts ...
View Full Document

  • Spring '10
  • kittu
  • printf, Dale Roberts

{[ snackBarMessage ]}

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern