使用 printf
这是 C 语言程序设计的“Hello, World!”级别操作,几乎所有 C 程序都会用到。

a) 控制台应用程序
这是最常见的形式,程序运行时,会弹出一个黑色的命令行窗口,输出显示在其中。
示例代码:hello.c
#include <stdio.h> // 必须包含标准输入输出头文件
int main() {
// 使用 printf 输出字符串到控制台
printf("你好,世界!\n");
// 输出整数
int age = 25;
printf("我的年龄是: %d\n", age);
// 输出浮点数
float pi = 3.14159f;
printf("圆周率 PI 约等于: %f\n", pi);
// 输出字符
char initial = 'A';
printf("我的首字母是: %c\n", initial);
return 0; // 程序正常结束
}
代码解释:
#include <stdio.h>:printf函数定义在标准输入输出库stdio.h中,所以必须包含这个头文件。int main():这是 C 程序的入口函数。printf("...", ...):printf函数的第一个参数是一个格式字符串,后面的参数是你要输出的变量。\n:这是一个换行符,表示输出后光标移到下一行。%d:这是一个格式占位符,表示在这里插入一个整数。%f:表示插入一个浮点数。%c:表示插入一个字符。
如何编译和运行?

你需要一个 C 语言编译器,Windows 上最常用的是 MinGW (Minimalist GNU for Windows),它通常作为 GCC 编译器套件的一部分。
-
安装 MinGW:
- 最简单的方式是安装一个集成开发环境,Code::Blocks、Dev-C++ 或 Visual Studio Community (带C++桌面开发 workload),安装时选择安装 MinGW/GCC 工具链。
- 或者,直接下载并安装 MSYS2,它提供了一个强大的类 Unix 环境和包管理器。
-
编译:
- 打开命令提示符 或 PowerShell。
- 使用
gcc命令来编译你的.c文件。-o参数用于指定输出的可执行文件名。gcc hello.c -o hello.exe
-
运行:
- 在同一个命令行窗口中,执行生成的
.exe文件。hello.exe
- 在同一个命令行窗口中,执行生成的
你会看到如下输出:
你好,世界!
我的年龄是: 25
圆周率 PI 约等于: 3.141590
我的首字母是: A
b) 图形界面应用程序
如果你使用的是 Windows API (Win32) 编写图形界面程序,printf 默认不会在窗口上显示任何东西,这时你需要使用专门的 Windows API 函数来在窗口的客户区绘制文本。
示例代码:win_hello.c
这是一个非常基础的 Win32 程序,它会创建一个窗口并在窗口标题栏显示文本,要绘制文本到窗口内部,需要处理 WM_PAINT 消息。
#include <windows.h>
// 窗口过程函数的声明
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 窗口类名
const wchar_t CLASS_NAME[] = L"Sample Window Class";
// 注册窗口类
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc; // 窗口过程函数
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(
0, // 可选的窗口样式
CLASS_NAME, // 窗口类名
L"你好,Windows API!", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 位置 (x, y)
800, 600, // 大小 (宽度, 高度)
NULL, // 父窗口句柄
NULL, // 菜单句柄
hInstance, // 实例句柄
NULL // 额外应用数据
);
if (hwnd == NULL) {
return 0;
}
// 显示窗口
ShowWindow(hwnd, nCmdShow);
// 消息循环
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
// 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_PAINT: {
// 当窗口需要重绘时,系统会发送此消息
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// 设置文本颜色为黑色
SetTextColor(hdc, RGB(0, 0, 0));
// 设置背景颜色为白色
SetBkColor(hdc, RGB(255, 255, 255));
// 在坐标 (50, 50) 处绘制文本
TextOut(hdc, 50, 50, L"这是在窗口内部输出的文本", 21);
EndPaint(hwnd, &ps);
}
return 0;
case WM_DESTROY: {
// 当窗口被销毁时,发送退出消息
PostQuitMessage(0);
}
return 0;
}
// 处理应用程序没有处理的消息
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
如何编译和运行?
使用 MinGW 的 gcc,需要链接 gdi32 库(用于图形绘制)。
gcc win_hello.c -o win_hello.exe -lgdi32
运行 win_hello.exe,你会弹出一个窗口,窗口内部会显示 "这是在窗口内部输出的文本"。
更高级的输出方法
除了 printf,还有一些其他方法,适用于特定场景。
a) 输出到文件
如果你想把程序的输出保存到一个文件而不是屏幕上,可以使用 fopen、fprintf 和 fclose。
示例代码:file_output.c
#include <stdio.h>
int main() {
// 以写入模式打开文件 "output.txt",如果文件不存在则创建,如果存在则清空。
FILE *file = fopen("output.txt", "w");
// 检查文件是否成功打开
if (file == NULL) {
printf("无法打开文件!\n");
return 1; // 返回非零值表示错误
}
// fprintf 的用法和 printf 一样,只是第一个参数是文件指针
fprintf(file, "这是写入文件的第一行,\n");
fprintf(file, "这是一个数字: %d\n", 12345);
// 关闭文件,非常重要!
fclose(file);
printf("内容已成功写入 output.txt 文件,\n");
return 0;
}
编译并运行后,你会在程序所在目录下找到一个名为 output.txt 的文件,内容如下:
这是写入文件的第一行。
这是一个数字: 12345
b) 重定向标准输出
这是一种非常方便的技巧,你不需要修改 C 代码,只需在命令行执行程序时使用 > 符号。
步骤:
-
编译上面的
hello.c程序,得到hello.exe。 -
打开命令提示符,执行以下命令:
hello.exe > output_from_redirect.txt
-
按回车执行,你会发现,这次屏幕上没有任何输出,一个名为
output_from_redirect.txt的文件被创建了,里面包含了hello.exe的所有输出内容。
这个技巧对于日志记录和批处理脚本非常有用,你还可以使用 >> 来追加内容而不是覆盖。
| 场景 | 推荐方法 | 说明 |
|---|---|---|
| 控制台程序 | printf() |
最常用、最简单的方式,直接输出到命令行窗口。 |
| 图形界面程序 | TextOut(), DrawText() |
Windows API 函数,用于在窗口的客户区绘制文本。 |
| 输出到文件 | fopen(), fprintf(), fclose() |
标准文件操作,将程序结果持久化存储。 |
| 命令行重定向 | program.exe > file.txt |
无需修改代码,在命令行将标准输出重定向到文件。 |
对于初学者来说,熟练掌握 printf 是在 Windows 上进行 C 语言输出的第一步,也是最关键的一步,当你开始开发更复杂的应用时,再根据需求学习其他方法。
