printf
printf( "format string " [ , expression ] ... );
- where:
- The format string is a quoted string, optionally containing one or more format specifiers, beginning with % symbols.
- After the format string come zero or more expressions to be printed.
- Specifically there must be exactly as many expressions
following the format string as there are format specifiers in the
string.
- Expressions to be printed may be any combination of constants and variables that match the data types of the format specifiers.
printf format specifiers
- printf format specifiers take the form of
%[flags][width][.precision][length]specifier
- where:
- specifier is the most important and only required part, indicating the type of data to be printed. e.g. "%f"
- See below for a complete table
- width specifies the total number of spaces to use to print the number, filling in with blanks if necssary
- Example: "%15f" would print a float in a space 15 characters wide
- If an asterisk ( * ) is used, then one of the data expressions is used to determine the width used.
- .precision indicates how many digits of a number to print, or sometimes the number to the right of the decimal point.
- Examples:
- "%15.3f" would print 10 * pi as 31.416, with three digits to the right of the decimal point.
- %15.3e" would print 10 * pi as 3.14e1, with three total digits of precision
- If a dot asterisk ( .* ) is used, then one of the data expressions is used to determine the width used.
- [flags] are optional, and can include::
- A minus sign ( - ) to left justify the output. Default is right justified.
- A plus sign ( + ) to force a sign to be printed.
- ( space ) to inhibit printing of the sign
- zero ( 0 ) to left pad the number with zeros instead of spaces
- hash ( # ) serves different purposes depending on the specifier used.
- With octal or hexidecimal output, specifies a leading 0 or 0x for non-zero data values
- With floating point types, requires printing a decimal point even if there are no digits following it.
- [length] is a subspecifier for unsigned, short, long, etc. types. See table below
printf specifiers
Note: CS 107 students are not responsible for knowing the a, A, n, or p specifiers.
specifier |
Output |
Example |
d or i |
Signed decimal integer |
392 |
u |
Unsigned decimal integer |
7235 |
o |
Unsigned octal |
610 |
x |
Unsigned hexadecimal integer |
7fa |
X |
Unsigned hexadecimal integer (uppercase) |
7FA |
f |
Decimal floating point, lowercase |
392.65 |
F |
Decimal floating point, uppercase |
392.65 |
e |
Scientific notation (mantissa/exponent), lowercase |
3.9265e+2 |
E |
Scientific notation (mantissa/exponent), uppercase |
3.9265E+2 |
g |
Use the shortest representation: %e or %f |
392.65 |
G |
Use the shortest representation: %E or %F |
392.65 |
a |
Hexadecimal floating point, lowercase |
-0xc.90fep-2 |
A |
Hexadecimal floating point, uppercase |
-0XC.90FEP-2 |
c |
Character |
a |
s |
String of characters |
sample |
p |
Pointer address |
b8000000 |
n |
Nothing printed.
The corresponding argument must be a pointer to a signed int.
The number of characters written so far is stored in the pointed location. |
|
% |
A % followed by another % character will write a single % to the stream. |
% |
printf length sub-specifiers
Note: CS 107 students are not responsible for knowing j, z, or t length specifiers, or wide character types
|
specifiers |
length |
d i |
u o x X |
f F e E g G a A |
c |
s |
p |
n |
(none) |
int |
unsigned int |
double |
int |
char* |
void* |
int* |
hh |
signed char |
unsigned char |
|
|
|
|
signed char* |
h |
short int |
unsigned short int |
|
|
|
|
short int* |
l |
long int |
unsigned long int |
|
wint_t |
wchar_t* |
|
long int* |
ll |
long long int |
unsigned long long int |
|
|
|
|
long long int* |
j |
intmax_t |
uintmax_t |
|
|
|
|
intmax_t* |
z |
size_t |
size_t |
|
|
|
|
size_t* |
t |
ptrdiff_t |
ptrdiff_t |
|
|
|
|
ptrdiff_t* |
L |
|
|
long double |
|
|
|
|
scanf
printf( "format string " [ , expression ] ... );
- where:
- The format string is a quoted string, normally consisting only of one or more format specifiers, beginning with % symbols.
- After the format string come zero or more expressions to be printed.
- Specifically there must be exactly as many expressions
following the format string as there are format specifiers in the
string.
- Expressions in scanf need to be memory addresses of where the
scanned data is to be stored, which are usually generated by applying
the "address of" operator, &, to a variable name, for example,
&X yields the address of X, i.e. the location of X in memory.
-
Scanf format specifiers
- scanf format specifiers take the form of
%[*][width][length]specifier
- where:
- specifier is the most important and only required part, indicating the type of data to be scanned. e.g. "%f"
- See below for a complete table
- Asterisk, *, indicates to read in the data from the input stream, but not store it. ( I.e. read and discard )
- width specifies the maximum number of characters to read in
- length is a modifier for unsigned, short, long,etc data types.
- See below for a complete table
scanf specifiers
Note: CS 107 students are not required to know the a,p, [ ], [^ ], or n specifiers
specifier |
Description |
Characters extracted |
i, u |
Integer |
Any number of digits, optionally preceded by a sign (+ or -).
Decimal digits assumed by default (0-9), but a 0 prefix introduces octal digits (0-7), and 0x hexadecimal digits (0-f). |
d |
Decimal integer |
Any number of decimal digits (0-9), optionally preceded by a sign (+ or -). |
o |
Octal integer |
Any number of octal digits (0-7), optionally preceded by a sign (+ or -). |
x |
Hexadecimal integer |
Any number of hexadecimal digits (0-9, a-f, A-F), optionally preceded by 0x or 0X, and all optionally preceded by a sign (+ or -). |
f, e, g |
Floating point number |
A series of decimal digits (or hexadecimal,
if preceded by 0x or 0X), optionally containing a decimal point,
optionally preceeded by a sign (+ or -) and optionally followed by the e
or E character and a decimal integer (or p or P and an hexadecimal
integer). Or any other sequence supported by strtod. |
a |
c |
Character |
The next character. If a width other than 1 is specified, the function reads exactly width
characters and stores them in the successive locations of the array
passed as argument. No null character is appended at the end. |
s |
String of characters |
Any number of non-whitespace characters, stopping at the first whitespace character found. A terminating null character is automatically added at the end of the stored sequence. |
p |
Pointer address |
A sequence of characters representing a
pointer. The particular format used depends on the system and library
implementation, but it is the same as the one used to format %p in fprintf. |
[characters] |
Scanset |
Any number of the characters specified between the brackets.
A dash (-) that is not the first character may produce non-portable behavior in some library implementations. |
[^characters] |
Negated scanset |
Any number of characters none of them specified as characters between the brackets. |
n |
Count |
No input is consumed.
The number of characters written so far is stored in the pointed location. |
% |
% |
A % followed by another % matches a single %. |
scanf length specifiers
Note: CS 107 students are not required to know the j, z, or t specifiers, or wide ( long ) character types
|
specifiers |
length |
d i |
u o x |
f e g a |
c s [] [^] |
p |
n |
(none) |
int* |
unsigned int* |
float* |
char* |
void** |
int* |
hh |
signed char* |
unsigned char* |
|
|
|
signed char* |
h |
short int* |
unsigned short int* |
|
|
|
short int* |
l |
long int* |
unsigned long int* |
double* |
wchar_t* |
|
long int* |
ll |
long long int* |
unsigned long long int* |
|
|
|
long long int* |
j |
intmax_t* |
uintmax_t* |
|
|
|
intmax_t* |
z |
size_t* |
size_t* |
|
|
|
size_t* |
t |
ptrdiff_t* |
ptrdiff_t* |
|
|
|
ptrdiff_t* |
L |
|
|
long double* |
|
|
|
Related functions
- fprintf and fscanf are used for formatted data transfer into and out of files respectively.
- sprintf and sscanf are used for formatted data transfer into and
out of memory respectively, e.g. "printng" into a character array.
- getc,putc, getchar and putchar transfer individual characters,
faster and at a more controlled level than printf( "%c", c ) and scanf(
"%c", c ) respectively.
No comments:
Post a Comment