c 没有正确打印 "┌──┐"字符

标签 c windows qt-creator

下午好,我的 C 代码遇到问题,但我不知道是什么原因造成的。

每次我尝试打印这样的字符:“┌──┐”时,我的程序只会打印一些奇怪的字符,如下面的屏幕截图所示:

screenshot of my terminal output

我在 Windows 上使用 Qt Creator,Qt 版本 5.5.0 MSVC 64 位。编译器是 Microsoft Visual C++ Compiler 12.0 (amd64)。

我尝试更改区域设置,但没有成功。我发现打印这些字符的唯一方法是将它们定义为带有 ASCII 代码的 int 变量并打印它们,但这导致了一些非常广泛且丑陋的编码,如下所示:

int cSupEsq = 218;  //'┌'
int cSupDir = 191;  //'┐'
int cInfEsq = 192;  //'└'
int cInfDir = 217;  //'┘'
int mVert = 179;    //'│'
int mHor = 196;     //'─'
int espaco = 255;   //' '
int letraO = 111;   //'o'

//Inicia limpando a tela da aplicação
clrscr();

//Linha 1
printf("%c", cSupEsq);
for (i = 1; i < 79; i++) { printf("%c", mHor); }
printf("%c", cSupDir);

有什么方法可以让程序正确处理这些字符吗?什么可能导致此问题?

最佳答案

使用 OEM 代码点的解决方案是正确的方法,代码页 850/437 是控制台的默认代码页,因此应该可以工作。您还可以使用SetConsoleOutputCP确保控制台使用正确的代码页。

话虽如此,当您不使用解决方法时,会发生的情况是源文件正在使用不同的代码页保存,即。不是代码页 850/437。源代码在内存中的表示形式是 Unicode(可能是 UTF-8),当您保存文件时,字符在内存中的表示形式将映射到文件的目标代码页。

您可以做的是使用 850/437 代码页作为目标保存文件,我不知道您如何在 Qt Creator 中执行此操作(如果可以的话),例如在 Visual Studio 中您可以选择单击“保存”按钮上的向下箭头并选择“使用编码保存”,然后您可以继续选择目标代码页,在您的情况下为代码页 850。这将确保内存中的代码点正确映射到要编译的文件.

我希望这有助于解释这个问题。

关于c 没有正确打印 "┌──┐"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904089/

相关文章:

windows - 在应用程序空闲时执行操作

c++ - 编译时包含一个库

c++ - 链接器找不到 dlsym

c - 在 C 中操作字符串时非常相似的函数出错

c - PETSc 卡在 MatView() 上

c - atoi 从字符串到整数使用 char 指针

macos - Mac 上 Qt Creator 的单文档界面

c - 多线程数独求解器

c++ - 无法在 COM 端口上正确使用 windows.h ReadFile。 WriteFile 似乎工作正常

windows - 批处理目录中的所有文件