C

C 知识量:16 - 74 - 317

4.5 其他需要了解的><

*修饰符- 4.5.1 -

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

打印对齐- 4.5.2 -

使用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