printf "%.*s"

本文详细介绍了C语言中printf函数的格式控制方法,包括如何通过*号动态设置输出宽度和精度,以及标志、输出最小宽度、精度和长度等各项的具体含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小数点.后“*”表示输出位数,具体的数据来自参数表
printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面提供变量给“*”。

同样,小数点.前也可以添加*,也要用户输入一个位宽值来代替,表示输出的字符所占位宽。

复制代码
#include <cstdio>
#include <iostream>

int main()
{    
    char *s = "this is test example";
    int a,b;
    printf("%.*s\n", 10, s);//这里的常量10就是给*号的,你也可以用一个变量来控制宽度
    printf("%*.*s\n", 20, 10, s);//常量20控制输出所占位宽,也可以用一个变量控制
    std::cin>>a>>b; //输入15 10
    printf("%*.*s\n", a, b, s);//输出为:-----this is te
    std::cin.get();
    std::cin.ignore();//暂停程序执行
}
复制代码

输出结果为:

this is te

----------this is te//-代表空格

15 10 //输入

-----this is te

注:printf的一般形式为printf("格式控制字符串",输出列表),格式控制字符串形式为:[标志][输出最小宽度][.精度][长度]类型。

其中方括号[]中的项为可选项。 各项的意义介绍如下:
1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀 0)
x,X 以十六进制形式输出无符号整数(不输出前缀 Ox)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数
e,E 以指数形式输出单、双精度实数
g,G 以%f 或%e 中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
2)标志:标志字符为-、+、#、空格四种,其意义下表所示:
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)
空格 输出值为正时冠以空格,为负时冠以负号
# 对 c,s,d,u类无影响;对 o 类,在输出时加前缀 o;对 x 类,在输出时加前缀 0x;对 e,g,f 类当结果有小数时才给出小数点
3)输出最小宽度:用十进制整数来表示输出的最少位数。 若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或 0。
4)精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
5)长度:长度格式符为 h,l 两种,h 表示按短整型量输出,l 表示按长整型量输出。

### C语言和Shell中 `%.*` 的用法与含义 在格式化输出中,`%.*` 是一种特殊的占位符,允许动态指定精度或宽度。它的主要作用是在运行时通过参数控制输出的字段宽度或小数点后的位数。 #### 在 C 语言中的 `%.*` 用法 C 语言的 `printf` 支持 `%.*` 格式说明符,其中星号 (`*`) 表示该值由后续的一个额外参数提供。这通常用于动态设置字符串的最大长度或浮点数的小数位数。例如: ```c #include <stdio.h> int main() { char str[] = "Hello, World!"; double pi = 3.1415926; int max_len = 5; int precision = 3; printf("Truncated string: %.*s\n", max_len, str); // 动态截取字符串长度 printf("Formatted float: %.*f\n", precision, pi); // 动态设定浮点数精度 return 0; } ``` 在此例子中,`%.*s` 和 `max_len` 参数一起决定了只打印前五个字符[^1];而 `precision` 控制了浮点数显示的有效数字数量[^3]。 #### 在 Shell 中的 `%.*` 应用 同样,在某些版本的 shell(如 bash 或 zsh),其内置的 `printf` 命令也支持类似的语法结构。比如下面的例子展示了如何利用这种特性来调整输出样式: ```bash #!/bin/bash str="Hello, World!" pi=3.1415926 max_len=5 precision=3 printf "Truncated string: %.${max_len}s\n" "$str" printf "Formatted float: %.${precision}f\n" "$pi" ``` 尽管这里的写法稍显冗长,但它确实体现了 POSIX 兼容 shells 下的一种实践方式[^4]。值得注意的是,并非所有的 shell 实现都会完全遵循这一行为模式,因此建议开发者查阅目标环境的具体文档确认兼容性状况。 --- ### 总结 无论是 C 语言还是特定类型的 Unix-like 系统上的 shell 脚本环境中,“%.*”均扮演着灵活定义数据展示细节的重要角色——既可以从变量里读取出必要的配置信息又保持源码简洁明了易于维护的优点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值