C/C++ 格式说明符

在 C/C++ 中,格式说明符(Format Specifiers)主要用于 printf()scanf() 等输入输出函数中,用于控制数据的格式化输入和输出。以下是常见的格式说明符及其用法:


一、基础格式说明符

说明符适用数据类型描述
%dint十进制整数(带符号)
%uunsigned int十进制无符号整数
%ffloat浮点数(默认保留6位小数)
%lfdouble双精度浮点数(printf中可用%f代替,但scanf必须用%lf
%cchar单个字符
%schar* (C 字符串)字符串(需以 \0 结尾)
%pvoid*指针地址(十六进制格式,如 0x7ffeeb0b4d60
%xint, unsigned int十六进制整数(小写字母,如 1a3f
%X同上十六进制整数(大写字母,如 1A3F
%o同上八进制整数
%efloat, 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, %hushort int / unsigned short
l%ld, %lulong int / unsigned long
ll%lld, %llulong long int / unsigned long long
L%Lf, %Lelong 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

五、注意事项

  1. 类型匹配:格式说明符必须与变量类型严格匹配,否则可能导致未定义行为。
    • 错误示例:printf("%d", 3.14); // 错误!应用 %f
  2. 指针与地址%p 需要将指针强制转换为 void*
  3. 字符串安全scanf("%s", str) 可能导致缓冲区溢出,建议用 %Ns(如 %10s)限制输入长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值