c语言 在windows输出

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 C语言 正文

使用 printf

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

c语言 在windows输出
(图片来源网络,侵删)

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输出
(图片来源网络,侵删)

你需要一个 C 语言编译器,Windows 上最常用的是 MinGW (Minimalist GNU for Windows),它通常作为 GCC 编译器套件的一部分。

  1. 安装 MinGW

    • 最简单的方式是安装一个集成开发环境,Code::BlocksDev-C++Visual Studio Community (带C++桌面开发 workload),安装时选择安装 MinGW/GCC 工具链。
    • 或者,直接下载并安装 MSYS2,它提供了一个强大的类 Unix 环境和包管理器。
  2. 编译

    • 打开命令提示符 或 PowerShell。
    • 使用 gcc 命令来编译你的 .c 文件。-o 参数用于指定输出的可执行文件名。
      gcc hello.c -o hello.exe
  3. 运行

    • 在同一个命令行窗口中,执行生成的 .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) 输出到文件

如果你想把程序的输出保存到一个文件而不是屏幕上,可以使用 fopenfprintffclose

示例代码: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 代码,只需在命令行执行程序时使用 > 符号。

步骤:

  1. 编译上面的 hello.c 程序,得到 hello.exe

  2. 打开命令提示符,执行以下命令:

    hello.exe > output_from_redirect.txt
  3. 按回车执行,你会发现,这次屏幕上没有任何输出,一个名为 output_from_redirect.txt 的文件被创建了,里面包含了 hello.exe 的所有输出内容。

这个技巧对于日志记录和批处理脚本非常有用,你还可以使用 >> 来追加内容而不是覆盖。

场景 推荐方法 说明
控制台程序 printf() 最常用、最简单的方式,直接输出到命令行窗口。
图形界面程序 TextOut(), DrawText() Windows API 函数,用于在窗口的客户区绘制文本。
输出到文件 fopen(), fprintf(), fclose() 标准文件操作,将程序结果持久化存储。
命令行重定向 program.exe > file.txt 无需修改代码,在命令行将标准输出重定向到文件。

对于初学者来说,熟练掌握 printf 是在 Windows 上进行 C 语言输出的第一步,也是最关键的一步,当你开始开发更复杂的应用时,再根据需求学习其他方法。

-- 展开阅读全文 --
头像
C语言malloc函数需要包含哪个头文件?
« 上一篇 02-08
dede友情链接表格循环如何实现?
下一篇 » 02-08

相关文章

取消
微信二维码
支付宝二维码

目录[+]