printf 格式化输出
格式控制符
格式符 | 说明 | 示例 |
---|
%d | 十进制整数 | printf("%d", 42); |
%i | 十进制整数(同 %d ) | printf("%i", 42); |
%u | 无符号十进制整数 | printf("%u", 100); |
%o | 无符号八进制整数 | printf("%o", 10); |
%x | 无符号十六进制(小写) | printf("%x", 255); |
%X | 无符号十六进制(大写) | printf("%X", 255); |
%f | 浮点数(默认6位小数) | printf("%f", 3.14); |
%e | 科学计数法(小写) | printf("%e", 123.4); |
%E | 科学计数法(大写) | printf("%E", 123.4); |
%g | 自动选择 %f 或 %e (短格式) | printf("%g", 0.0001); |
%G | 自动选择 %f 或 %E | printf("%G", 0.0001); |
%c | 单个字符 | printf("%c", 'A'); |
%s | 字符串 | printf("%s", "Hello"); |
%p | 指针地址 | printf("%p", &x); |
%n | 已输出字符数(保存到参数) | int count; printf("123%n", &count); |
%% | 输出 % 字符 | printf("%%"); |
修饰符
修饰符 | 说明 |
---|
%[flags][width][.precision][length]specifier | 完整格式说明符结构 |
flags | 控制对齐、填充等: |
- | 左对齐(默认右对齐) |
+ | 显示正负号(如 +42 ) |
(空格) | 正数前显示空格 |
0 | 用 0 填充宽度(默认用空格填充) |
# | 特殊格式(如八进制前加 0 ,十六进制前加 0x ) |
width | 最小输出宽度(不足时填充) |
.precision | 浮点数小数位数或字符串最大字符数 |
length | 指定参数长度:h (short)、l (long)、ll (long long)、L (long double)等 |
代码示例
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.1415926;
char str[] = "HelloWorld";
printf("%%d: %d\n", num);
printf("%%10d: |%10d|\n", num);
printf("%%-10d: |%-10d|\n", num);
printf("%%010d: %010d\n", num);
printf("%%.2f: %.2f\n", pi);
printf("%%.5s: %.5s\n", str);
printf("%%e: %e\n", pi);
printf("%%#x: %#x\n", num);
long big_num = 123456789L;
printf("%%ld: %ld\n", big_num);
return 0;
}
scanf 格式化输入
格式控制符
格式符 | 说明 | 示例 |
---|
%d | 十进制整数 | scanf("%d", &num); |
%i | 十进制、八进制、十六进制 | scanf("%i", &num); |
%u | 无符号十进制整数 | scanf("%u", &num); |
%o | 八进制整数 | scanf("%o", &num); |
%x | 十六进制整数 | scanf("%x", &num); |
%f | 浮点数 | scanf("%f", &fval); |
%lf | 双精度浮点数 | scanf("%lf", &dval); |
%c | 字符 | scanf("%c", &ch); |
%s | 字符串(不读空格) | scanf("%s", str); |
%[...] | 匹配字符集合 | scanf("%[a-z]", str); |
%p | 指针地址 | scanf("%p", &ptr); |
%n | 已读取字符数 | scanf("%d%n", &num, &count); |
修饰符
修饰符 | 说明 |
---|
%[*][width][length]specifier | 完整格式说明符结构 |
* | 抑制赋值(读取但不保存) |
width | 最大输入宽度(如 %5d 最多读5位数字) |
length | 参数长度:h (short)、l (long)、ll (long long)等 |
代码示例(抑制赋值 *
)
#include <stdio.h>
int main() {
int num1, num2;
scanf("%d %*s %d", &num1, &num2);
printf("num1 = %d, num2 = %d\n", num1, num2);
return 0;
}
代码示例(输入宽度限制 width
)
#include <stdio.h>
int main() {
char str[10];
int num;
scanf("%3s %d", str, &num);
printf("str = %s, num = %d\n", str, num);
return 0;
}
代码示例(指定参数长度 length
)
#include <stdio.h>
int main() {
short num_short;
long num_long;
scanf("%hd %ld", &num_short, &num_long);
printf("short: %hd, long: %ld\n", num_short, num_long);
return 0;
}
代码示例(修改日期格式)
#include <stdio.h>
int main() {
int year, month, day;
scanf("%4d%*[-]%2d%*[-]%2d", &year, &month, &day);
printf("日期:%d年%d月%d日\n", year, month, day);
return 0;
}