如何从 C 中的拉丁 2 代码页打印字符不带字符串?

问题描述

我正在努力用 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 …"