我的主要语言是葡萄牙语,所以我们有一些重音词(áéíóú...等等字符)我正在尝试阅读并将这些字符存储到变量中,但它只是不起作用。如果我只是在它的代码上设置它,但如果我要求用户输入它不。示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]) {
setlocale(LC_ALL, "Portuguese");
char test, test2; //The same still happens using unsigned char
test = 'í';
printf("Character: %c\n", test);
scanf(" %c", &test2); //The same still happens using fgets in case of a string
printf("Character: %c\n", test2);
system("pause");
return 0;
}
编译并执行代码时显示:
字符:í
(等待输入,例如:)í
字符:¡
如果输入'á'则打印''(空格),''打印','打印'¢'和ú打印'£'。
我是编程和stackoverflow的新手,所以对于我所犯的任何错误感到抱歉,感谢所有的帮助,谢谢。
哦,如果这有任何不同,我也在使用Dev-c ++进行编译。
答案 0 :(得分:1)
您需要认识到char
中的C
是大小为1 byte
的数字类型。它实际上并不完全是为了保持单个语言字符项的表示。 (有时称为代码点)。
您有两种方法可以解决这种情况:
使用单字节的字符编码。 (例如,正确的
iso-8859
系列的版本,在您的情况下为iso-8859-1
。这个
将确保所有字符都适合单个字节。
使用适当的多字节机制处理您的输入
字符。您可能会查找char16_t
或char32_t
类型
也许转向使用wchar_t
和相关的库例程