问题描述
我正在努力用 C 语言在这句话中打印“ę”:
...W Katalogu o nazwie "c:\roboczy" znajduje się 90% dobrze napisanych programów w C...
我的 cmd 的编码页面是 CP-852(“Latin 2”)。我用 Dev-C++ 5.11 编写,我的编译器是 TDM-GCC 4.9.2 64 位版本。
我已设法使用此脚本打印反斜杠和 ó:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char znak1 = 92;
printf("...W Katalogu o nazwie %\"c:%croboczy%\" znajduje sie 90%% dobrze napisanych program\242w
w C...\n",znak1);
return 0;
}
当然,现在它只是“e”在那里,但是既没有将“\281”直接插入到 printf 中,也没有将 0x119 放入像 znak1 这样的字符中。
例如插入“\281”我得到:
...W Katalogu o nazwie "c:\roboczy" znajduje si☻81 90% dobrze napisanych programów w C...
当添加一个像 znak1 这样的值为 0x119 的 char 变量时:
...W Katalogu o nazwie "c:\roboczy" znajduje si↓ 90% dobrze napisanych programów w C...
我知道我可以简单地保留 ASCII 字符并且输出将是可读的,但是我无法用这种语言做这么简单的事情,这让我很烦恼。我会很感激一些关于该怎么做的提示!
干杯! :)
解决方法
好的,有人向我指出“拉丁语 2”并不是那么重要。在为 CP-852 精确搜索字符代码时,我发现、尝试并获得了以下结果:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char znak1 = 0xA9;
char znak2 = 0xA2;
printf("...W Katalogu o nazwie \"c:\\croboczy\" znajduje si%c 90%% dobrze
napisanych program%cw w C...\n",znak1,znak2);
return 0;
}
抱歉打扰了。
,即使您已经找到了实现目标的方法,我也会解释您尝试的结果。
例如插入“\281”我得到:
...W Katalogu o nazwie "c:\roboczy" znajduje si☻81 90% dobrze napisanych programów w C...
无论您如何得出错误的代码,281 都不是有效的八进制数,因为它只有 0 到 7 的数字。因此只有 \2
被识别为 ☻
的转义序列,和 81
是按字面打印的。
顺便说一句,除了用printf
和%c
插入字符外,你也可以直接将转义序列写入字符串中,十六进制比八进制更容易:"… znajduje si\xA9 …"
。