C语言---printf函数使用详细说明

文章目录

  • [1. 类型符(Type Specifiers)------ 必选](#1. 类型符(Type Specifiers)—— 必选)
  • [2. 标志(Flags)------ 可选](#2. 标志(Flags)—— 可选)
  • [3. 最小宽度(Width)------ 可选](#3. 最小宽度(Width)—— 可选)
  • [4. 精度(.Precision)------ 可选](#4. 精度(.Precision)—— 可选)
  • [5. 长度修饰符(Length)------ 可选](#5. 长度修饰符(Length)—— 可选)
  • 代码示例

printf 函数的格式控制字符串是 C 语言中最强大也最复杂的工具之一。其完整语法格式为:
%[标志][最小宽度][.精度][长度修饰符]类型符

1. 类型符(Type Specifiers)------ 必选

决定了数据以何种形式呈现。

类型符 描述 示例
%d / %i 有符号十进制整数 123
%u 无符号十进制整数 123
%o 无符号八进制整数 173
%x / %X 无符号十六进制整数(小写/大写) 7b / 7B
%f 十进制浮点数(默认 6 位小数) 3.141593
%e / %E 科学计数法(小写/大写) 3.14e+00
%g / %G 自动选择 %f 或 %e 中较短的一种 -
%c 单个字符 'A'
%s 字符串 "Hello"
%p 指针地址(十六进制) 0x7ffe...
%% 输出一个百分号 % %

2. 标志(Flags)------ 可选

用于微调输出的外观。

标志 描述
- 左对齐(默认是右对齐)。
+ 显示正负号。正数前加 +,负数前加 -。
空格 正数前加空格,负数前加 -(与 + 冲突时 + 优先)。
# 特殊转换:%o 前加 0,%x 前加 0x;对于浮点数,强制显示小数点。
0 零填充:在宽度范围内用 0 代替空格填充(通常用于数字)。

3. 最小宽度(Width)------ 可选

指定输出内容占用的最小字符数。

如果实际内容长度小于宽度,则根据对齐方式填充空格或 0。

如果实际内容长度大于宽度,则按实际长度输出(不会截断)。

动态宽度:可以使用 *,由后面的参数指定。例如 printf("%*d", 5, 10); 等同于 %5d。

4. 精度(.Precision)------ 可选

以点号 . 开头,后跟数字。

对于整数:表示输出的最少数字位数。不足则补 0(如 %.3d 输出 001)。

对于浮点数:表示小数点后的位数(四舍五入)。

对于字符串:表示输出的最大字符数(超过则截断)。

动态精度:同样可以使用 *。例如 printf("%.*f", 2, 3.1415);。

5. 长度修饰符(Length)------ 可选

用于指定数据类型的具体长度(如 long 或 short)。

修饰符 描述 示例
h 短整型 (short) %hd
l 长整型 (long) 或 宽字符 %ld, %lf
ll 长度更长的整型 (long long) %lld
L 长双精度浮点型 (long double) %Lf

代码示例

bash 复制代码
#include <stdio.h>

int main() {
    int num = 42;
    double pi = 3.14159265;
    char *str = "Hello World";

    // 1. 宽度与对齐
    printf("|%10d|\n", num);    // 右对齐,宽度10
    printf("|%-10d|\n", num);   // 左对齐,宽度10
    printf("|%010d|\n", num);   // 补零,宽度10

    // 2. 精度控制
    printf("%.2f\n", pi);       // 保留2位小数: 3.14
    printf("%.5s\n", str);      // 只输出前5个字符: Hello

    // 3. 进制与符号
    printf("%+d\n", num);       // 强制显示正号: +42
    printf("%#x\n", num);       // 显示十六进制前缀: 0x2a

    // 4. 动态参数
    printf("%*.*f\n", 8, 3, pi); // 宽度8,精度3: "   3.142"

    return 0;
}
相关推荐
liulilittle4 小时前
俄罗斯访问欧洲国际线路优化
开发语言·网络·信息与通信·ip·通信·俄罗斯·莫斯科
陈小桔4 小时前
logging模块-python
开发语言·python
消失的旧时光-19434 小时前
函数指针 + 结构体 = C 语言的“对象模型”?——从 C 到 C++ / Java 的本质统一
linux·c语言·开发语言·c++·c
!停4 小时前
C语言栈和队列的实现
开发语言·数据结构
源代码•宸4 小时前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
期待のcode4 小时前
TransactionManager
java·开发语言·spring boot
郝学胜-神的一滴4 小时前
Linux系统编程:深入理解读写锁的原理与应用
linux·服务器·开发语言·c++·程序人生
Larry_Yanan4 小时前
Qt多进程(十一)Linux下socket通信
linux·开发语言·c++·qt
代码游侠4 小时前
学习笔记——ESP8266 WiFi模块
服务器·c语言·开发语言·数据结构·算法