You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CLion中让代码支持重音字符输出?

问题:C语言printf无法输出重音字符,setlocale无效怎么办?

我尝试让代码支持重音字符(比如Á),尤其是在printf()函数中。已经调用setlocale()并传入多种参数,但均无效。开发环境是CLion,全局及项目设置已配置为UTF-8,构建工具用的是CMake。

原代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "cubo.h"

int main() {
    setlocale(LC_ALL,"");
    double lado = 5.5;
    CUBO cubo = inicializa_cubo(lado);
    printf("PROPRIEDADES DO CUBO\n");
    printf("Lado do cubo: %lf\n", lado_cubo(cubo));
    printf("Área do cubo: %lf\n", area_cubo(cubo));
    printf("Volume do cubo: %lf\n\n", volume_cubo(cubo));
    system("pause");
    return 0;
}
解决方法

通过修改代码,针对Windows平台调整控制台代码页,解决了重音字符输出问题,同时兼容Linux平台:

#include <stdio.h>
#include <stdlib.h>
#include "cubo.h"

#ifdef _WIN32
    #include <windows.h>
#endif

int main() {
    #ifdef _WIN32
        SetConsoleOutputCP(CP_UTF8);  // 将Windows输出代码页改为UTF-8
        SetConsoleCP(CP_UTF8);  // 将Windows输入代码页改为UTF-8
    #endif
    double lado = 5.5;
    CUBO cubo = inicializa_cubo(lado);
    printf("PROPRIEDADES DO CUBO\n");
    printf("Lado do cubo: %lf\n", lado_cubo(cubo));
    printf("Área do cubo: %lf\n", area_cubo(cubo));
    printf("Volume do cubo: %lf\n\n", volume_cubo(cubo));
    #ifdef _WIN32
        system("pause");
    #elif __linux__
        printf("Pressione qualquer tecla para continuar. . .");
        getchar();
    #endif
    return 0;
}

关键改动说明:

  • 针对Windows平台,通过SetConsoleOutputCP(CP_UTF8)和SetConsoleCP(CP_UTF8)强制将控制台的输入、输出代码页切换为UTF-8,确保重音字符能正确输出。
  • 使用条件编译#ifdef _WIN32和#elif __linux__实现跨平台兼容,避免非Windows平台编译错误。

内容的提问来源于stack exchange,提问作者user19259068

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:41:19