C语言中 %*
的用法总结
一、scanf
中的 %*
二、printf
中的 %*
- 作用:动态控制输出的宽度或精度(通过参数传递值)。
- 语法:
格式符 | 参数顺序 | 作用 |
---|
%*d | (宽度, 数值) | 按动态宽度输出整数 |
%.*f | (精度, 数值) | 按动态精度输出浮点数 |
%*.*f | (宽度, 精度, 数值) | 动态控制宽度和精度 |
- 规则:
- 宽度不足:自动扩展,不截断数值。
- 负宽度:表示左对齐(如
%-5d
→ 10
)。
- 示例:
int width = 6, precision = 2;
printf("|%*d|", width, 10);
printf("|%.*f|", precision, 3.1415);
printf("|%*.*f|", 6, 2, 3.1415);
三、关键区别与易错点
场景 | scanf 的 %* | printf 的 %* |
---|
核心作用 | 跳过输入字段 | 动态控制输出格式 |
参数顺序 | 无需额外参数 | 必须按顺序传参(如先宽度后值) |
常见错误 | 输入格式不匹配导致跳过失败 | 参数顺序错误(如 %*d 写成 %d* ) |
特殊符号 | 无 | 负宽度表示左对齐(%-5d ) |
四、记忆口诀
scanf
的 *
:读入数据跳过不留,省去变量不用愁。printf
的 *
:宽度精度动态调,参数顺序别颠倒。
五、对比示例
函数 | 代码 | 输入/输出 | 结果 |
---|
scanf | scanf("%d-%*d-%d", &a, &b); | 输入 2023-10-05 | a=2023 , b=5 |
printf | printf("%*d", 5, 10); | 输出 | 10 (宽度5) |
printf | printf("%.*f", 2, 3.1415); | 输出 | 3.14 (精度2) |
总结:%*
在 scanf
中是“跳过输入”,在 printf
中是“动态格式控制”。核心区别在于参数传递和作用方向(输入 vs 输出)!