首页 > C语言笔记

C语言printf()输出对齐(左对齐和右对齐)

在C语言中,printf() 是一个强大的函数,用于格式化输出;它不仅可以简单地打印文本和变量,还能控制输出的对齐方式。
 

printf() 函数使用格式说明符来控制输出,格式说明符的基本形式是:

%[flags][width][.precision]specifier

其中,flags 用于控制对齐方式,width 指定输出字段的宽度,precision 控制精度,specifier 指定输出的数据类型。

右对齐(默认行为)

默认情况下,printf() 的输出是右对齐的。当指定宽度大于实际输出内容长度时,内容会靠右显示,左侧用空格填充。例如:

#include <stdio.h>

int main() {
    int num = 42;
    printf("%5d\n", num);
    printf("%10s\n", "Hello");
    return 0;
}

输出结果:

   42
     Hello

在这个例子中,%5d 指定了一个宽度为 5 的字段来输出整数,%10s 指定了一个宽度为 10 的字段来输出字符串。注意数字和字符串都是右对齐的。

左对齐

要实现左对齐,我们需要在格式说明符中使用减号-标志。这会使输出内容靠左显示,右侧用空格填充。例如:

#include <stdio.h>

int main() {
    int num = 42;
    printf("%-5d\n", num);
    printf("%-10s\n", "Hello");
    return 0;
}

输出结果:

42   
Hello     

在这个例子中,%-5d 和 %-10s 分别指定了左对齐的整数和字符串输出。注意输出内容现在靠左对齐,右侧填充了空格。

混合对齐

在实际应用中,我们经常需要同时使用左对齐和右对齐来创建格式化的输出。下面是一个更复杂的例子,展示了如何混合使用不同的对齐方式:

#include <stdio.h>

int main() {
    printf("%-10s%10s%10s\n", "Name", "Age", "Height");
    printf("%-10s%10d%10.2f\n", "Alice", 25, 165.5);
    printf("%-10s%10d%10.2f\n", "Bob", 30, 180.0);
    printf("%-10s%10d%10.2f\n", "Charlie", 22, 170.75);
    return 0;
}

输出结果:

Name            Age     Height
Alice            25     165.50
Bob              30     180.00
Charlie          22     170.75

在这个例子中,我们创建了一个简单的表格,第一列使用左对齐(%-10s)来对齐名字,第二列和第三列使用右对齐(%10d 和 %10.2f)来对齐年龄和身高。这种混合使用左对齐和右对齐的方法可以创建出整洁、易读的表格式输出。

精确控制宽度

有时候,我们可能需要根据实际数据动态调整输出宽度。printf() 允许我们使用星号*来指定宽度,这个宽度可以是一个变量。例如:

#include <stdio.h>
#include <string.h>

int main() {
    char *names[] = {"Alice", "Bob", "Charlie", "David"};
    int max_length = 0;

    // 找出最长的名字
    for (int i = 0; i < 4; i++) {
        int length = strlen(names[i]);
        if (length > max_length) {
            max_length = length;
        }
    }

    // 输出对齐的名字列表
    for (int i = 0; i < 4; i++) {
        printf("%-*s : %d characters\n", max_length, names[i], strlen(names[i]));
    }

    return 0;
}

输出结果:

Charlie : 7 characters
Bob     : 3 characters
Alice   : 5 characters
David   : 5 characters

在这个例子中,我们首先计算了最长名字的长度,然后使用%-*s来动态设置输出宽度。这确保了所有名字都能正确对齐,无论最长的名字有多长。

相关文章