📜  cpp 中的 printf() - C++ (1)

📅  最后修改于: 2023-12-03 14:40:14.756000             🧑  作者: Mango

CPP中的printf() - C++

在C++中,printf()是一个常用的输出函数,可以输出各种数据类型的值和字符串。在此我们将介绍其基本用法和一些高级特性。

基本用法

下面是一个简单的例子,使用printf()输出一个字符串和一个整数:

#include <cstdio>

int main() {
    printf("Hello, world!\n");
    int age = 25;
    printf("My age is %d.\n", age);
    return 0;
}

输出:

Hello, world!
My age is 25.

在上面的代码中,我们首先包含了头文件,以使用printf()函数。然后,我们在主函数中使用printf()函数输出一个字符串"Hello, world!\n"和一个整数变量age的值。在字符串中,我们使用了一个格式指示符"%d",它告诉printf()函数在输出字符串时要将变量age的值替换进去。最后,我们返回了一个值0,表示程序正常结束。

在printf()中,格式指示符是由百分号和一个字母组成的,用于告诉printf()函数如何格式化输出。下面是一些常用的格式指示符:

| 格式指示符 | 描述 | | ---------- | ------------------------------ | | %d | 将整数值作为有符号十进制数显示 | | %u | 将整数值作为无符号十进制数显示 | | %x、%X | 将整数值作为十六进制数显示 | | %f、%lf | 将浮点数值显示为小数 | | %c | 将字符值显示 | | %s | 将字符串值显示 |

附加特性
控制输出宽度、精度、填充字符

printf()函数可以通过在格式指示符中添加一些修饰符来精细控制输出格式,如调整输出宽度、精度和填充字符。下面是一些常用的修饰符:

| 修饰符 | 描述 | | ------ | ---------------------------------------------------- | | %nd | 指定输出宽度为n列,若输出文字长度不足n列,则在前面用空格补齐 | | %0nd | 指定输出宽度为n列,若输出文字长度不足n列,则在前面用0补齐 | | %.nf | 指定输出精度为n位小数 | | %m.nf | 指定输出宽度为m列,输出精度为n位小数,若不足m列,则在前面用空格补齐 |

下面是一些使用修饰符的示例:

#include <cstdio>

int main() {
    int x = 123;
    printf("x = %5d\n", x);      // 输出5个字符,右对齐,左侧补空格
    printf("x = %05d\n", x);     // 输出5个字符,右对齐,左侧补0
    double y = 1.23456;
    printf("y = %.2f\n", y);     // 输出2位小数
    printf("y = %6.2f\n", y);    // 输出6个字符(包括小数点和2位小数),右对齐,左侧补空格
    printf("y = %-6.2f\n", y);   // 输出6个字符(包括小数点和2位小数),左对齐,右侧补空格
    printf("y = %06.2f\n", y);   // 输出6个字符(包括小数点和2位小数),右对齐,左侧补0
    return 0;
}

输出:

x =   123
x = 00123
y = 1.23
y =   1.23
y = 1.23  
y = 001.23
使用转义序列

printf()函数可以使用一些特殊字符和转义序列控制输出格式和颜色。下面是一些常用的转义序列:

| 转义序列 | 描述 | | ---------- | --------------------------------------------------- | | \n | 换行 | | \t | 制表符 | | \r | 回车符 | | \b | 退格符 | | \\ | 输出一个反斜杠 | | \" | 输出一个双引号 | | \' | 输出一个单引号 | | \033[40m | 改变背景色为黑色 | | \033[41m | 改变背景色为红色 | | \033[42m | 改变背景色为绿色 | | \033[43m | 改变背景色为黄色 | | \033[44m | 改变背景色为蓝色 | | \033[45m | 改变背景色为紫色 | | \033[46m | 改变背景色为天蓝色 | | \033[47m | 改变背景色为白色 | | \033[0m | 改变颜色和背景色为默认值,即黑色字体和白色背景 | | \033[m | 改变颜色和背景色为默认值,即黑色字体和白色背景 | | \033[30m | 改变字体颜色为黑色 | | \033[31m | 改变字体颜色为红色 | | \033[32m | 改变字体颜色为绿色 | | \033[33m | 改变字体颜色为黄色 | | \033[34m | 改变字体颜色为蓝色 | | \033[35m | 改变字体颜色为紫色 | | \033[36m | 改变字体颜色为天蓝色 | | \033[37m | 改变字体颜色为白色 |

下面是一些使用转义序列的示例:

#include <cstdio>

int main() {
    printf("This is a tab character: \t\t\t.\n");
    printf("This is a backspace character: \b\b\b.\n");
    printf("This is a carriage return character:\r.\n");
    printf("This is a percent character: %%.\n");
    printf("This is a newline character: \\\n.\n");
    printf("This is a double quote character: \\\".\n");
    printf("This is a single quote character: \\'.\n");
    printf("\033[31mThis text has a red color.\033[0m\n");
    printf("\033[42mThis text has a green background.\033[0m\n");
    printf("\033[32;45mThis text has a green foreground color and a magenta background.\033[0m\n");
    return 0;
}

输出:

image-20210614114215444

将输出写入文件

printf()函数也可以将输出写入文件,可以使用fopen()函数打开文件,使用fprintf()函数将输出写入文件,最后使用fclose()函数关闭文件。下面是一个示例:

#include <cstdio>

int main() {
    FILE *fp = fopen("output.txt", "w");
    if (fp == nullptr) {
        printf("Failed to open file.\n");
        return 1;
    }
    fprintf(fp, "This is a test.\n");
    fclose(fp);
    return 0;
}

这段代码将在程序所在目录中创建一个名为output.txt的文件,并将"This is a test.\n"写入该文件中。

总结

现在你已经学会了在C++中使用printf()函数进行格式化输出,包括基本用法、附加特性和将输出写入文件等。对于需要更加复杂的输出格式和颜色,你可以使用更加强大的库,如Boost.Format和fmt等。