Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中使用system()函数时,ASCII字符27(左箭头)消失+;_C++ - Fatal编程技术网

C++ 在C+;中使用system()函数时,ASCII字符27(左箭头)消失+;

C++ 在C+;中使用system()函数时,ASCII字符27(左箭头)消失+;,c++,C++,在编写程序时,我遇到了一个bug。当我在代码中不使用system()函数时,例如system(“CLS”);字符27(即ASCII代码中的左箭头)显示正确,但使用此函数后,此字符变为空白。我应该补充一点,这不会发生在任何其他ASCII字符上。 下面是一些代码: printf("%c %c",27,26); 它显示:← → 但是 显示:→ 有人有过类似的问题并处理过吗?我想找出解决方法,因为我需要system()和左箭头。代码>←字符是代码点 例如,在(也称为DOS OEM代

在编写程序时,我遇到了一个bug。当我在代码中不使用system()函数时,例如system(“CLS”);字符27(即ASCII代码中的左箭头)显示正确,但使用此函数后,此字符变为空白。我应该补充一点,这不会发生在任何其他ASCII字符上。 下面是一些代码:

printf("%c %c",27,26);
它显示:← →
但是

显示:→

有人有过类似的问题并处理过吗?我想找出解决方法,因为我需要system()和左箭头。

代码>←字符是代码点

例如,在(也称为DOS OEM代码页)中,字节
0x1B
(dec 27)用于显示Unicode码点
U+2190
。有关更多详细信息,请参阅

因此,可能调用
system(“CLS”)
正在重置终端的当前代码页,这将解释为什么打印
0x1B
不再显示为
。尝试调用
系统(“CHCP 437”)
设置控制台输出CP(437)
,然后将其更改回来


或者,您可以完全停止使用代码页打印ANSI字符串。使用
wprintf()
WriteConsoleW()
打印Unicode字符串,或者由于您的问题被标记为,出于兴趣,请使用
std::wcout
在windows控制台上,ASCII代码0-5、11、16-26和28-31具有可打印符号,32以下的其他代码实际上是控制代码,可能会做一些非常奇怪的事情。您从哪里获得ASCII 27是左箭头字符的信息?字符27是转义符(不可打印)。任何低于ASCII 32的字符都被视为控制字符,并且不能保证打印任何字符。是的,确实没有可打印字符,所以可能我说错了,但左箭头的代码是27,所以我这么说。无论如何,是否可以将system()(据我所知,它将可显示字符转换为控制字符)与0-32之间的字符代码一起使用?您仍然没有提到从何处获得的信息,即左箭头是ASCII 27。信不信由你,你从哪里得到的信息部分(或全部)是显示这样一个字符所需要的信息。如果它来自某个ASCII表,那么你需要知道ASCII表代表的是什么代码页。我写了这个:从中我得到了定义这些字符的数字。这实际上取决于用于显示符号的代码页。大多数代码页不显示控制字符的可打印符号。自从DOS和ANSI驱动程序问世以来,我就没有玩过代码页或控制代码,我也不知道Windows控制台的默认代码页是什么,但在我的系统中,我提到的代码是可以打印的“我不知道Windows控制台的默认代码页是什么”-因此查询它:。或者,只需查看控制台的窗口属性。CP 850在我的系统上是默认的,您的是什么?的前128个字节与相同,因此字节
0x1B
显示为
在两个代码页中。感谢您的建议,我能够按如下方式解决此问题:系统(“CHCP 65001”);printf(“字符:\u2190\n”);
system("CLS");
printf("%c %c",27,26);