📅  最后修改于: 2023-12-03 15:38:13.363000             🧑  作者: Mango
在 C 语言中,我们通常使用 printf()
函数来输出信息。但是,有时候我们需要对输出的信息进行一些格式化或者自定义,而 printf()
函数本身并不提供太多的控制选项。在本篇文章中,我们将介绍一些方法来更改 printf()
的输出。
C 语言中的 printf()
函数可以输出数字、字符串、字符等等类型的数据。我们可以通过在格式字符串中使用一些占位符的方式来控制输出的格式。以下是一些常用的格式控制字符:
%d
:输出整数。%f
:输出浮点数。%c
:输出一个字符。%s
:输出一个字符串。除此之外,我们还可以在占位符中使用一些标记来更改输出的格式。例如,使用 -
标记可以使输出左对齐,使用 +
标记可以在输出正数时加上正号,使用 0
标记可以在输出宽度不足时用零来填充空白等等。
以下是一个示例代码:
#include <stdio.h>
int main() {
int age = 20;
float height = 1.75;
char initial = 'J';
char name[] = "John Smith";
printf("Name: %s\n", name);
printf("Age: %d\n", age);
printf("Initial: %c\n", initial);
printf("Height: %f\n", height);
return 0;
}
输出结果如下:
Name: John Smith
Age: 20
Initial: J
Height: 1.750000
除了通过占位符来控制输出格式之外,我们还可以自定义 printf()
函数来实现一些更高级的功能。例如,我们可以在 printf()
函数中添加额外的参数,用于在输出信息前进行校验和处理,或者在输出信息后进行清理等等。
以下是一个示例代码:
#include <stdio.h>
#include <stdarg.h>
void my_printf(const char *format, ...) {
va_list args;
va_start(args, format);
char ch;
while ((ch = *format++) != '\0') {
if (ch != '%') {
putchar(ch);
} else {
ch = *format++;
switch (ch) {
case 'd': {
int value = va_arg(args, int);
printf("%d", value);
break;
}
case 'f': {
double value = va_arg(args, double);
printf("%f", value);
break;
}
case 'c': {
int value = va_arg(args, int);
printf("%c", (char) value);
break;
}
case 's': {
char *value = va_arg(args, char *);
printf("%s", value);
break;
}
default:
putchar(ch);
}
}
}
va_end(args);
}
int main() {
int age = 20;
double height = 1.75;
char initial = 'J';
char name[] = "John Smith";
my_printf("Name: %s\n", name);
my_printf("Age: %d\n", age);
my_printf("Initial: %c\n", initial);
my_printf("Height: %f\n", height);
return 0;
}
输出结果与前面的示例相同。
在这个示例中,我们定义了一个自定义的 my_printf()
函数,并使用了 C 语言中的可变参数列表来实现。在这个函数中,我们首先遍历 format
字符串中的每一个字符,如果当前字符不是占位符 %
,我们直接将其输出。如果当前字符是 %
,则表示我们要对某一个参数进行输出。然后我们从可变参数列表中取出对应的参数,并按照指定的格式进行输出。
在 C 语言中,printf()
函数是一个非常常用的函数,可以方便地输出各种类型的信息。除了使用占位符来控制输出格式之外,我们还可以自定义 printf()
函数,实现一些更高级的功能。