当前位置: 首页 > news >正文

printf函数格式化输出攻略

目录

一、基本用法

二、占位符

基本用法

常用占位符

字符串占位符示例

多占位符示例

注意事项

三、占位符列表

基本数据类型占位符

浮点数占位符

特殊类型占位符

长度修饰符

使用示例

注意事项

四、输出格式

1、限定宽度

基本用法

左对齐输出

浮点数宽度限制

2、强制显示正负号

3、控制小数精度

基本精度控制

结合宽度限制

动态参数指定

4、截断字符串输出

基本用法

特点

结合宽度限定


一、基本用法

        printf() 函数用于将参数文本输出到屏幕。函数名中的"f"代表"format"(格式化),表示该函数可以定制输出文本的格式。

基本语法示例:

#include <stdio.h>
int main() 
{printf("Hello World");return 0;
}

上述代码会在屏幕上输出一行文字"Hello World"。

注意事项:

  1. printf() 不会自动在行尾添加换行符。运行结束后,光标会停留在输出结束的位置,不会自动换行。

  2. 如需换行,可以在输出文本的结尾添加换行符\n:

    #include <stdio.h>
    int main() 
    {printf("Hello World\n");return 0;
    }
  3. 若需要在文本内部换行,同样可以通过插入换行符实现:

    #include <stdio.h>
    int main() 
    {printf("Hello\nWorld\n");/* 等价于 */printf("Hello\n");printf("World\n");return 0;
    }

重要说明:

  • printf() 函数定义在标准库头文件stdio.h中

  • 使用该函数前,必须在源文件头部引入此头文件


二、占位符

printf() 函数支持在输出文本中使用占位符,这些占位符可以在运行时被具体的值替换。

基本用法

#include <stdio.h>
int main()
{printf("There are %d apples\n", 3);return 0;
}

说明:

  • There are %d apples\n 是输出文本,其中 %d 是占位符。

  • 占位符以百分号 % 开头,后跟一个类型标识符(如 d 表示整数)。

  • printf() 的第二个参数 3 会替换 %d,最终输出:There are 3 apples

常用占位符

占位符类型示例
%d整数printf("%d", 10)
%s字符串printf("%s", "abc")
%f浮点数printf("%f", 3.14)
%c单个字符printf("%c", 'A')

字符串占位符示例

#include <stdio.h>
int main()
{printf("%s will come tonight\n", "zhangsan");return 0;
}

输出:zhangsan will come tonight

多占位符示例

#include <stdio.h>
int main()
{printf("%s says it is %d o'clock\n", "lisi", 21);return 0;
}

说明:

  • 第一个 %s 被 "lisi" 替换

  • 第二个 %d 被 21 替换
    输出:lisi says it is 21 o'clock

注意事项

  1. 参数匹配规则

    • 占位符数量必须与后续参数数量严格匹配

    • 如果有 n 个占位符,printf() 需要 n + 1 个参数(包括格式字符串本身)。

  2. 错误示例:此类错误可能导致未定义行为(输出乱码或程序崩溃)。

    printf("%d %s", 10);  // 错误:缺少第二个参数

三、占位符列表

printf() 提供多种占位符,对应不同的 C 语言数据类型。以下是常用占位符的完整参考:

基本数据类型占位符

占位符类型说明示例
%dint十进制整数printf("%d", 10)
%iint%dprintf("%i", 10)
%uunsigned int无符号十进制整数printf("%u", 10U)
%oint八进制整数printf("%o", 10)
%xint十六进制整数(小写)printf("%x", 255) → ff
%Xint十六进制整数(大写)printf("%X", 255) → FF

浮点数占位符

占位符类型说明
%ffloat/double十进制浮点数
%efloat/double科学计数法(小写e)
%Efloat/double科学计数法(大写E)
%gfloat/double自动选择%f%e(更简洁)
%Gfloat/double自动选择%f%E
%afloat/double十六进制浮点数(小写)
%Afloat/double十六进制浮点数(大写)

特殊类型占位符

占位符类型说明
%cchar单个字符
%schar*字符串
%pvoid*指针地址
%nint*不打印,存储已输出的字符数
%%-输出百分号字符

长度修饰符

可与基本占位符组合使用:

  • hshort(如%hd

  • llong(如%ld

  • lllong long(如%lld

  • Llong double(如%Lf

  • zsize_t(如%zd

使用示例

#include <stdio.h>int main() 
{// 基本整数printf("Decimal: %d\n", 255);        // 255printf("Octal: %o\n", 255);          // 377printf("Hex: %x\n", 255);            // ff// 浮点数printf("Float: %f\n", 3.14159);      // 3.141590printf("Scientific: %e\n", 3.14159); // 3.141590e+00// 特殊类型printf("Character: %c\n", 'A');      // Aprintf("String: %s\n", "Hello");     // Helloprintf("Pointer: %p\n", main);       return 0;
}

注意事项

  1. 类型必须严格匹配占位符

  2. 使用%n时要格外小心(可能引发安全问题)

  3. %%用于输出百分号字符本身


四、输出格式

printf() 可以定制占位符的输出格式。

1、限定宽度

printf() 函数允许通过格式说明符限定输出的最小宽度。具体用法如下:

基本用法

在占位符中指定最小宽度,当输出内容不足该宽度时,默认会在左侧填充空格(右对齐)。

示例:

#include <stdio.h>
int main() 
{printf("%5d\n", 123);  // 输出为 "  123"(前面有2个空格)return 0;
}

说明:

  • %5d 表示该整数的输出宽度至少为5个字符

  • 由于"123"只有3位,不足部分会在前面补2个空格

左对齐输出

在宽度指示符前添加-号可以改为左对齐(右侧补空格)。

示例:

#include <stdio.h>
int main() 
{printf("%-5d\n", 123);  // 输出为 "123  "(后面有2个空格)return 0;
}

浮点数宽度限制

对于浮点数,宽度限制会作用于整个数字(包括整数部分、小数点和小数部分)。

示例:

#include <stdio.h>
int main() 
{printf("%12f\n", 123.45);  // 输出为 "  123.450000"return 0;
}

说明:

  • %12f 表示浮点数至少占用12个字符宽度

  • 默认情况下,printf()会输出6位小数,因此实际输出为"123.450000"(共10个字符)

  • 不足12位,所以在前面补2个空格

注意:当实际数值的宽度超过指定的最小宽度时,会按照实际宽度输出,不会截断数据。

2、强制显示正负号

        默认情况下,printf() 仅在输出负数时显示 - 号。若需强制显示正数的 + 号,可在占位符的 % 后添加 + 标志。

示例:

#include <stdio.h>
int main() 
{printf("%+d\n", 12);   // 输出 "+12"printf("%+d\n", -12);  // 输出 "-12"return 0;
}

说明:

  • %+d 格式确保数值始终带有符号标识

  • 适用于需要明确区分正负值的场景

3、控制小数精度

基本精度控制

通过 %.nf 格式可指定小数位数(n 为要保留的位数):

#include <stdio.h>
int main() 
{printf("Number is %.2f\n", 0.5);  // 输出 "Number is 0.50"return 0;
}

注意:

  • 会自动进行四舍五入

  • 不足位数补零(如 %.3f 输出 "0.500")

结合宽度限制

可同时指定宽度和精度(格式:%宽度.精度f):

#include <stdio.h>
int main() 
{printf("%6.2f\n", 0.5);  // 输出 "  0.50"(头部2空格)return 0;
}

说明:

  • %6.2f 表示总宽度6字符,含2位小数

  • 默认右对齐,不足宽度左侧补空格

动态参数指定

使用 * 占位符可通过参数动态设置宽度和精度:

#include <stdio.h>
int main() 
{printf("%*.*f\n", 6, 2, 0.5);  // 等效于 printf("%6.2f\n", 0.5)return 0;
}

特点:

  • 第一个 * 对应宽度参数(示例中的6)

  • 第二个 * 对应精度参数(示例中的2)

  • 提高代码灵活性,适合需要运行时确定格式的场景

4、截断字符串输出

    printf() 函数可以通过 %.ns 格式说明符来控制字符串的输出长度,其中 n 指定要显示的最大字符数。

基本用法

#include <stdio.h>
int main() 
{printf("%.5s\n", "hello world");  // 输出 "hello"return 0;
}

说明:

  • %.5s 表示只输出字符串的前5个字符

  • 原字符串 "hello world" 被截断为 "hello"

  • 不会修改原字符串,仅控制输出内容

特点

  1. 安全截断:不会导致缓冲区溢出

  2. 精确控制:可指定任意截取长度(不超过字符串实际长度)

  3. 格式灵活:可与最小宽度结合使用(如 %10.5s

结合宽度限定

#include <stdio.h>
int main() 
{printf("%10.5s\n", "hello world");  // 输出 "     hello"(右对齐)printf("%-10.5s\n", "hello world"); // 输出 "hello     "(左对齐)return 0;
}

注意:

  • 当截取长度超过字符串实际长度时,按实际字符串长度输出

  • 常用于格式化表格输出或固定长度显示场景

http://www.dtcms.com/a/324177.html

相关文章:

  • 本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕校对增强版
  • CodePlan:基于代码形式规划的大模型结构化推理新范式
  • 机器学习——多元线性回归
  • 【2025CVPR-图象分类方向】ProAPO:视觉分类的渐进式自动提示优化
  • 【Tomcat】企业级web应用服务器
  • 【代码随想录day 16】 力扣 112. 路径总和
  • jupyter notebook如何打开其他盘目录
  • 第二章、LSTM(Long Short-term Memory:长短时记忆网络)
  • 【CF】Day124——杂题 (鸽巢原理 | 构造 | 贪心 + 模拟)
  • Excel常用功能函数
  • vue3-基础语法
  • 开启单片机
  • jvm有哪些垃圾回收器,实际中如何选择?
  • 【FPGA】初识FPGA
  • Git 版本管理规范与最佳实践摘要
  • 后量子密码学的迁移与安全保障:迎接量子时代的挑战
  • 【鸿蒙/OpenHarmony/NDK】C/C++开发教程之环境搭建
  • Linux操作系统从入门到实战(十八)在Linux里面怎么查看进程
  • HarmonyOS NEXT系列之编译三方C/C++库
  • 人工智能-python-机器学习-决策树与集成学习:决策树分类与随机森林
  • 给AI装上“翻译聚光灯”:注意力机制的机器翻译革命
  • ECharts Y轴5等分终极解决方案 - 动态适配缩放场景
  • 【走进Docker的世界】Docker的发展历程
  • MyBatis-Plus 逻辑删除
  • Spark学习(Pyspark)
  • Shell脚本-了解i++和++i
  • wordpress语言包制作工具
  • 点击速度测试:一款放大操作差距的互动挑战游戏
  • 简要介绍交叉编译工具arm-none-eabi、arm-linux-gnueabi与arm-linux-gnueabihf
  • 面向高级负载的 Kubernetes 调度框架对比分析:Volcano、YuniKorn、Kueue 与 Koordinator