C 知识量:16 - 74 - 317
printf()和scanf()都可以使用*修饰符,但是用法却不一样。
1、对于printf()函数来说,可以用*修饰符来替换固定的字段宽度,在程序运行时通过输入值进行动态的设置。
#include <stdio.h> int main(void) { /*变宽字段*/ int n = 365; double d = 3.1415926; unsigned ns, ds; printf("Input a value for ns:\n"); scanf("%u", &ns); printf("n = %*d\n", ns, n); printf("Input a value for ds:\n"); scanf("%u", &ds); printf("d = %.*f\n", ds, d); system("pause"); return 0; }
运行结果为:
Input a value for ns: 8 n = 365 Input a value for ds: 3 d = 3.142
以上代码中,通过scanf()函数获取输入的字段宽度,然后通过printf()函数的*修饰符动态的设置了字段宽度,实现了显示字段的动态调整。
2、对于scanf()函数来说,把*放在%和转换字符之间,会使得scanf()函数跳过相应的输入项。
#include <stdio.h> int main(void) { /*变宽字段*/ int n; printf("Input two value for n:\n"); scanf("%*d,%d", &n); printf("n = %d\n", n); system("pause"); return 0; }
运行结果为:
Input two value for n: 15,23 n = 23
使用printf()函数时,为了使打印的数值纵向对齐,可以设置一个足够大的固定字段宽度。
#include <stdio.h> int main(void) { /*变宽字段*/ int n1 = 25, n2 = 234, n3 = 3, n4 = 23423, n5 = 267, n6 = 234, n7 = 9, n8 = 1243, n9 = 11235; printf("%6d %6d %6d\n%6d %6d %6d\n%6d %6d %6d", n1, n2, n3, n4, n5, n6, n7, n8, n9); system("pause"); return 0; }
运行结果为:
25 234 3 23423 267 234 9 1243 11235
此外,也可以通过-修饰符,使数值左对齐。以上代码修改为:
#include <stdio.h> int main(void) { /*变宽字段*/ int n1 = 25, n2 = 234, n3 = 3, n4 = 23423, n5 = 267, n6 = 234, n7 = 9, n8 = 1243, n9 = 11235; printf("%-6d %-6d %-6d\n%-6d %-6d %-6d\n%-6d %-6d %-6d", n1, n2, n3, n4, n5, n6, n7, n8, n9); system("pause"); return 0; }
运行结果为:
25 234 3 23423 267 234 9 1243 11235
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6