[应用方案] C语言printf,高级用法

[复制链接]
2668|13
 楼主| benjaminka 发表于 2025-2-17 13:21 | 显示全部楼层 |阅读模式
在C语言中,printf函数是一个非常强大的工具,它允许我们以多种方式格式化输出。以下是一些printf函数的进阶用法:
限定宽度
1988020566 发表于 2025-3-9 19:10 | 显示全部楼层
动态宽度与精度              
macpherson 发表于 2025-3-9 19:16 | 显示全部楼层
虽然printf在大多数C环境中都是可用的,但其行为(特别是浮点数的表示)可能会因平台和编译器而异。在编写需要跨平台运行的代码时,要注意这些差异。
usysm 发表于 2025-3-9 22:27 | 显示全部楼层
%d或%i:以十进制形式输出有符号整数。
%u:以十进制形式输出无符号整数。
%o:以八进制形式输出无符号整数。
%x:以十六进制形式输出无符号整数(小写字母表示)。
%X:以十六进制形式输出无符号整数(大写字母表示)。
weifeng90 发表于 2025-3-10 08:16 来自手机 | 显示全部楼层
在MCU编程中首先得将串口输出重定向到C标准函数。
sanfuzi 发表于 2025-3-11 14:51 | 显示全部楼层
// 动态宽度控制(宽度由第二个参数决定)
printf("%*d\n", 5, 123); // 输出 "   123"

// 动态精度控制(精度由第二个参数决定)
printf("%.2f\n", 3.14159); // 输出 "3.14"
printf("%.*f\n", 2, 3.14159); // 输出 "3.14"
cashrwood 发表于 2025-3-12 18:50 | 显示全部楼层
虽然printf本身不支持条件语句,但你可以通过构建格式字符串和参数列表来模拟条件输出。这通常涉及到一些字符串操作或使用辅助变量。
robincotton 发表于 2025-3-12 22:38 | 显示全部楼层
结合 snprintf 和 vprintf,适应复杂场景需求。
pmp 发表于 2025-3-15 15:13 | 显示全部楼层
#include <stdio.h>

int main() {
    int num = 123;

    printf("%#x\n", num);   // 输出:0x7b
    printf("%06d\n", num);  // 输出:000123
    printf("%-6d\n", num);  // 输出:123   
    printf("%+d\n", num);   // 输出:+123
    printf("% d\n", num);   // 输出: 123

    return 0;
}
jonas222 发表于 2025-3-15 15:43 | 显示全部楼层
printf("%5s\n", "abc");    // 输出 "  abc"(右侧填充空格)
printf("%s\n%3s\n", "a", "b"); // 输出:
                            // a
                            //   b
timfordlare 发表于 2025-3-15 15:57 | 显示全部楼层
对于复杂的数据结构(如结构体),你需要手动格式化每个字段。printf不提供直接支持来遍历或自动格式化复杂数据结构。
wilhelmina2 发表于 2025-3-15 19:53 | 显示全部楼层
对于浮点数,可以指定小数点后的位数。例如,printf("%.2f", 3.14159)将输出"3.14"。
对于字符串,可以指定最大输出的字符数。例如,printf("%.5s", "Hello, World!")将输出"Hello"。
nomomy 发表于 2025-3-15 22:06 | 显示全部楼层
默认情况下,如果输出宽度小于指定的字段宽度,printf 使用空格进行填充。可以使用 0(零)来指定用零填充数字。
jkl21 发表于 2025-3-16 14:45 | 显示全部楼层
int a = 10, b = 20;
char fmt[64];
snprintf(fmt, sizeof(fmt), "a=%d, b=%d\n", a, b);
printf(fmt); // 输出 "a=10, b=20\n"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

1631

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部