prinf 与 scanf - C语言笔记
...大约 3 分钟
本文主要介绍 C 语言标准库<stdio.h>
中的格式化输出函数 printf()
和 格式化输入函数 scanf()
的基本用法。
printf()
语法:
int printf(const char *format, ...)
format
参数是一个格式字符串,它指定了输出内容的格式。在其中用 %
符号来表示格式化字符,用%%
输出一个 %
符号自身。
printf 的格式化字符
语法:%[flags][width][.precision][length]specifier
specifier | 描述 |
---|---|
%d | 十进制带符号整数(只有负数有符号) |
%u | 十进制无符号整数 |
%x | 十六进制无符号整数(小写字母 a-f ) |
%X | 十六进制无符号整数(大写字母 A-F ) |
%o | 八进制无符号整数(前缀 0 ) |
%f | 浮点数(小数点后带有精度) |
%e | 指数记数法的浮点数(小数点后带有精度) |
%E | 指数记数法的浮点数(大写 E ) |
%g | 自动选择 e 或 f 格式(较短的) |
%G | 自动选择 E 或 f 格式(较短的) |
%s | 字符串(以空字符结束) |
%c | 单个字符 |
%p | 指针地址 |
flags | 描述 |
---|---|
- | 给定宽度内左对齐(默认右对齐) |
+ | 强制显示正负号 |
空格 | 空格填充 |
# | (o )显示八进制前缀0 、(x , X )十六进制前缀0x , 0X |
0 | 给定宽度内不足的位数用 0 填充 |
width
: 输出的最小宽度(包括符号),小于时默认填充空格,大于时不截断。precision
: 对于整数,表示进制转换后的位数(仅指整数位数);
对于浮点数,表示小数点后的最大长度,不足用0
补齐;
对于字符串,表示字符串的最大长度,超过时截断。(不能与width
同时使用)
length | 描述 |
---|---|
h | 被解释为短整型(对于整数) |
l | 被解释为长整型(对于整数或宽字符c ,宽字符串s ) |
L | 被解释为长双精度型(对于浮点数) |
printf 示例
%+d
: 输出带符号整数,正数前加+
号,负数前加-
号。%05d
: 输出带符号整数,不足 5 位的位数用0
填充。%5d
: 输出带符号整数,不足 5 位的位数用空格填充。%lf
: 输出双精度浮点数(double
)。%Lf
: 输出长双精度浮点数(long double
)。
scanf()
语法:
int scanf(const char *format, ...)
format
参数是一个格式字符串,它指定了输入内容的格式。在其中用 %
符号来表示格式化字符,用%%
读取一个 %
符号自身。
scanf 的格式化字符
语法:%[*][width][modifiers]
modifiers | 描述 | 参数类型 |
---|---|---|
%d | 十进制整数 | int* |
%u | 十进制无符号整数 | unsigned int* |
%x , %X | 十六进制整数 | int* |
%o | 八进制无符号整数 | int* |
%i | 十/八/十六进制整数(取决于输入的前缀) | int* |
%f , %e , %E , %g , %G | 单精度浮点数 | float* |
%lf | 双精度浮点数 | double* |
%Lf | 长双精度浮点数 | long double* |
%s | 字符串(以空字符结束) | char* |
%c | 读取下一个字符(指定宽度可读取多个字符) | char* |
%p | 指针地址 |
注意
对于printf()
方法,可以用%f
输出单精度或双精度浮点数;
但对于scanf()
方法%f
只能读取单精度浮点数,读取双精度浮点数需要用%lf
。
scanf 示例
%d%d%d
: 读取三个整数,并分别赋值给int
型变量。示例输入:1 2 3
。%d, %d, %d
: 读取三个整数,并分别赋值给int
型变量。示例输入:1, 2, 3
。%s%d
: 读取字符串和整数,并分别赋值给char*
和int
型变量。示例输入:hello 123
。
Powered by Waline v3.3.0