打印
[应用方案]

C语言printf,高级用法

[复制链接]
1520|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:以十六进制形式输出无符号整数(大写字母表示)。

使用特权

评论回复
5
weifeng90| | 2025-3-10 08:16 | 只看该作者
在MCU编程中首先得将串口输出重定向到C标准函数。

使用特权

评论回复
6
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"

使用特权

评论回复
7
cashrwood| | 2025-3-12 18:50 | 只看该作者
虽然printf本身不支持条件语句,但你可以通过构建格式字符串和参数列表来模拟条件输出。这通常涉及到一些字符串操作或使用辅助变量。

使用特权

评论回复
8
robincotton| | 2025-3-12 22:38 | 只看该作者
结合 snprintf 和 vprintf,适应复杂场景需求。

使用特权

评论回复
9
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;
}

使用特权

评论回复
10
jonas222| | 2025-3-15 15:43 | 只看该作者
printf("%5s\n", "abc");    // 输出 "  abc"(右侧填充空格)
printf("%s\n%3s\n", "a", "b"); // 输出:
                            // a
                            //   b

使用特权

评论回复
11
timfordlare| | 2025-3-15 15:57 | 只看该作者
对于复杂的数据结构(如结构体),你需要手动格式化每个字段。printf不提供直接支持来遍历或自动格式化复杂数据结构。

使用特权

评论回复
12
wilhelmina2| | 2025-3-15 19:53 | 只看该作者
对于浮点数,可以指定小数点后的位数。例如,printf("%.2f", 3.14159)将输出"3.14"。
对于字符串,可以指定最大输出的字符数。例如,printf("%.5s", "Hello, World!")将输出"Hello"。

使用特权

评论回复
13
nomomy| | 2025-3-15 22:06 | 只看该作者
默认情况下,如果输出宽度小于指定的字段宽度,printf 使用空格进行填充。可以使用 0(零)来指定用零填充数字。

使用特权

评论回复
14
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"

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

1432

帖子

0

粉丝