使用标准 char 数据类型而不是 wchar_t 的 C 西里尔控制台输入

C Cyrillic console input with standard char data type instead of wchar_t

在我的大学里,我有一个课程作业是编写一个 C 项目,该项目支持控制台上的西里尔输入和文本以及写入文件。但是他们只允许使用char数据类型和printf scanf函数。

在过去的两天里,我一直在研究如何做到这一点,并找到了解决方案,如果您将编码设置为 UTF16 并使用 wchar_t,则仅支持西里尔字符。但这让我使用 wchar_t 函数 wprintf、wscanf 等。这不是一个真正的选择。

这是我现在拥有的代码,但它在控制台上打印了奇怪的符号。

int main(void) {

setlocale(LC_ALL, "bg-BG");

char str[80];

printf("Въведи текст: "); //Enter text:
scanf("%s", str);

printf("Ти въведе: %s", str); //You entered: 

getch();

return 0;

}

有什么我遗漏或误解的吗?据我所知 C/C++ ASCII table 仅支持范围为 0 - 127 的英文字符。

显然,幸运的是,我设法使用这两个使其工作:

system("chcp 1251"); setlocale(LC_ALL, "UTF8"); 所以这是最终的解决方案:

int main(void) {

    system("chcp 1251");
    setlocale(LC_ALL, "UTF8");

    char str[80];

    printf("Въведи текст: ");
    scanf("%s", str);

    printf("Ти въведе: %s", str);

    getch();

    return 0;
}

现在很有魅力