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
来动态设置输出宽度。这确保了所有名字都能正确对齐,无论最长的名字有多长。