使用标准 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;
}
现在很有魅力
在我的大学里,我有一个课程作业是编写一个 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;
}
现在很有魅力