c不能正确打印“┌──┐”字符

时间:2015-11-24 21:23:02

标签: c windows qt-creator

下午好,我的c代码出现了问题,我不知道是什么造成的。

每当我尝试打印这样的字符时:“┌──┐”我的程序只会打印一些奇怪的字符,就像在这个截图上一样:

screenshot of my terminal output

我在Windows上使用Qt Creator,Qt版本5.5.0 MSVC 64位。编译器是Microsoft Visual C ++编译器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);

有什么方法可以让程序正确对待这些字符?可能导致这个问题的原因是什么?

2 个答案:

答案 0 :(得分:2)

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

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

你可以做的是使用850/437代码页作为目标来保存文件,我不知道你是如何在Qt Creator中做到这一点的(如果可以的话),在Visual Studio中,例如你可以选择保存按钮上的向下箭头,然后选择&#34;使用编码保存&#34;,然后您可以继续选择目标代码页,在您的案例代码页850中。这将确保内存代码点被映射正确地到要编译的文件。

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

答案 1 :(得分:0)

不必一次打印一个字符。相反,您可以使用转义序列:

printf("\xDA\xBF\xC0\xD9\xB3\xC4\xFF");