如何在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
相关产品推荐
相关产品推荐

