C/C++ 格式说明符及其用法
作者:暮色尽染
在 C/C++ 中,格式说明符(Format Specifiers)主要用于 printf()、scanf() 等输入输出函数中,用于控制数据的格式化输入和输出,下面给大家介绍C/C++ 格式说明符及其用法,感兴趣的朋友一起看看吧
在 C/C++ 中,格式说明符(Format Specifiers)主要用于 printf()、scanf() 等输入输出函数中,用于控制数据的格式化输入和输出。以下是常见的格式说明符及其用法:
一、基础格式说明符
| 说明符 | 适用数据类型 | 描述 |
|---|---|---|
%d | int | 十进制整数(带符号) |
%u | unsigned int | 十进制无符号整数 |
%f | float | 浮点数(默认保留6位小数) |
%lf | double | 双精度浮点数(printf中可用%f代替,但scanf必须用%lf) |
%c | char | 单个字符 |
%s | char* (C 字符串) | 字符串(需以 \0 结尾) |
%p | void* | 指针地址(十六进制格式,如 0x7ffeeb0b4d60) |
%x | int, unsigned int | 十六进制整数(小写字母,如 1a3f) |
%X | 同上 | 十六进制整数(大写字母,如 1A3F) |
%o | 同上 | 八进制整数 |
%e | float, double | 科学计数法(小写 e,如 3.141593e+00) |
%E | 同上 | 科学计数法(大写 E,如 3.141593E+00) |
%g/%G | 同上 | 自动选择 %f 或 %e(根据数值大小决定更紧凑的格式) |
%% | - | 输出百分号 % |
二、修饰符(用于精细控制格式)
1. 宽度与对齐
printf("%10d", 123); // 输出宽度为10,右对齐:" 123"
printf("%-10d", 123); // 输出宽度为10,左对齐:"123 "2. 精度控制
printf("%.2f", 3.14159); // 保留2位小数:3.14
printf("%.5s", "hello world"); // 截取前5个字符:"hello"3. 填充字符
printf("%05d", 42); // 用0填充宽度5:"00042"4. 长度修饰符
| 修饰符 | 示例 | 描述 |
|---|---|---|
h | %hd, %hu | short int / unsigned short |
l | %ld, %lu | long int / unsigned long |
ll | %lld, %llu | long long int / unsigned long long |
L | %Lf, %Le | long double |
三、scanf() 的格式说明符
scanf() 中必须严格匹配数据类型:
int num;
scanf("%d", &num); // 输入整数
double value;
scanf("%lf", &value); // 输入双精度浮点数(必须用%lf)跳过输入:
scanf("%d %*s %f", &age, &salary); // 跳过中间的字符串输入四、代码示例
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.14159;
char str[] = "Hello";
printf("十进制: %d, 十六进制: 0x%x\n", num, num);
printf("浮点数: %.2f, 科学计数法: %e\n", pi, pi);
printf("字符串: %s, 地址: %p\n", str, (void*)&num);
printf("填充示例: %05d\n", num);
return 0;
}输出:
十进制: 42, 十六进制: 0x2a
浮点数: 3.14, 科学计数法: 3.141590e+00
字符串: Hello, 地址: 0x7ffd5a3d4a4c
填充示例: 00042
五、注意事项
- 类型匹配:格式说明符必须与变量类型严格匹配,否则可能导致未定义行为。
- 错误示例:
printf("%d", 3.14);// 错误!应用%f。
- 错误示例:
- 指针与地址:
%p需要将指针强制转换为void*。 - 字符串安全:
scanf("%s", str)可能导致缓冲区溢出,建议用%Ns(如%10s)限制输入长度。
到此这篇关于C/C++ 格式说明符的文章就介绍到这了,更多相关C++ 格式说明符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
