C printf 函数
最后修改日期:2025 年 4 月 6 日
在 C 编程中,格式化输出对于清晰地显示数据至关重要。printf 函数是向控制台打印的标准工具。它支持各种格式说明符来控制输出外观。本教程涵盖 printf 的基础知识、格式说明符和实际示例。掌握 printf 可以确保程序输出专业且易于阅读。
什么是 printf?
C 语言中的 printf 函数将格式化输出打印到 stdout。它接受一个格式字符串和可选参数。格式字符串包含文本和格式说明符,用于定义如何显示参数。始终包含 stdio.h 才能使用 printf。为了安全起见,请避免使用用户提供的格式字符串,以防止格式字符串攻击等漏洞。
Basic printf Usage
此示例演示了 printf 显示文本的最简单用法。
#include <stdio.h>
int main() {
printf("Hello, World!\n"); // Print a simple message
return 0;
}
在此,printf 输出字符串“Hello, World!”,后跟一个换行符。\n 转义序列将光标移到下一行。这个基本示例展示了如何在不使用变量的情况下打印静态文本。printf 要正常工作需要 stdio.h 头文件。
使用 printf 打印变量
了解如何使用 printf 的格式说明符显示变量值。
#include <stdio.h>
int main() {
int age = 25;
float height = 1.75f;
char grade = 'A';
printf("Age: %d\n", age); // Integer
printf("Height: %.2f\n", height); // Float with 2 decimals
printf("Grade: %c\n", grade); // Character
return 0;
}
此示例使用格式说明符:%d 用于整数,%.2f 用于具有 2 位小数的浮点数,%c 用于字符。每个说明符都匹配相应的变量类型。printf 函数按顺序用变量值替换说明符。格式说明符可确保在输出中正确表示数据。
使用 printf 格式化数字
使用宽度、精度和对齐说明符控制数字格式。
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.14159f;
printf("Default: %d\n", num);
printf("Width 5: %5d\n", num); // Right-aligned in 5 spaces
printf("Left: %-5dEND\n", num); // Left-aligned
printf("Precision: %.3f\n", pi); // 3 decimal places
printf("Combined: %8.2f\n", pi); // 8 width, 2 decimals
return 0;
}
数字格式控制包括宽度(%5d)、左对齐(%-5d)和精度(%.3f)。宽度用空格填充数字,以达到指定的长度。精度控制浮点数的小数位数。组合格式(%8.2f)同时设置宽度和精度。这些选项可创建整齐对齐的数字输出。
打印多个值
在一个 printf 语句中高效地显示多个变量。
#include <stdio.h>
int main() {
char name[] = "Alice";
int score = 95;
float average = 92.5f;
printf("%s scored %d/100 (Avg: %.1f%%)\n",
name, score, average);
return 0;
}
此示例在一个 printf 调用中组合了字符串(%s)、整数(%d)和浮点数(%.1f)说明符。%% 用于打印字面上的百分号。参数按顺序与说明符匹配。可以使用单个格式化字符串高效地构建复杂输出。始终将说明符类型与变量类型匹配。
printf 高级格式化
探索十六进制和科学计数法等高级格式化选项。
#include <stdio.h>
int main() {
int value = 255;
double large = 1234567.89;
printf("Hex: %x\n", value); // Lowercase hexadecimal
printf("HEX: %X\n", value); // Uppercase hexadecimal
printf("Scientific: %e\n", large); // Scientific notation
printf("Shorter: %g\n", large); // Shorter of %f or %e
printf("Octal: %o\n", value); // Octal representation
return 0;
}
高级说明符包括用于十六进制的 %x/%X,用于科学计数法的 %e,用于紧凑浮点数显示的 %g,以及用于八进制的 %o。这些格式对于技术或调试输出非常有用。十六进制在低级编程中很常见。科学计数法可以高效地处理非常大或非常小的数字。
使用 printf 的最佳实践
- 匹配说明符与类型:确保格式说明符与变量类型匹配,以避免未定义行为。
- 使用宽度和精度:应用格式控制,以获得专业外观的对齐输出。
- 避免用户控制的格式:切勿将用户输入用作格式字符串,以防止安全漏洞。
- 包含换行符:除非需要连续输出,否则格式字符串末尾应加上
\n。 - 考虑安全替代方案:对于面向用户的输出,当不需要格式化时,可以考虑使用
puts或fputs。
来源
本教程探讨了 C 语言中功能多样的 printf 函数。从基本的文本输出到高级格式化,printf 对于清晰的程序通信至关重要。通过练习这些示例来掌握格式化输出。
作者
列表 C 标准库。