我有一个家庭作业问题.我必须验证大写字符的输入,但是我遇到了A到Z的问题.
我只是把它while (c<65 || c>90),它工作正常.但是,在我的国家,我们也使用Ñ,所以这是我的问题.我尝试使用ascii代码165来验证条目,但它不起作用.
char范围是-128到127,所以对于扩展的ASCII表我需要一个unsigned char吗?
我试过这个:
int main (){
    unsinged char n;
    //scanf("%c",&n);
    printf("%c",n);
    return 0;
}
如果它扫描'Ñ'则打印165.
下一个:
unsigned char n;
n='Ñ';
printf("%d",n);
pPrints 209.
所以我尝试用165和209验证,但都不起作用.
为什么会这样?我该怎么做才能验证此角色的输入?
当我使用unsigned char和验证165时它的作品.但是当我使用cmd通过读取txt文件来尝试它时,没有工作......
如果我扫描'Ñ',则打印165.
这意味着在您的系统中,字符'Ñ'的代码等于165,与ASCII 的通常扩展ISO 8859-1扩展一样.
printf("%d",'Ñ');
打印209.
在C中你必须考虑到两个字符的整理顺序的存在,这可能是不同的:
源字符集是指编辑环境使用的编码,即您通常键入.c文件的位置.您的系统和/或编辑器和/或IDE正在使用特定的编码模式.在这种情况下,似乎编码是UTF-8.
因此,如果在编辑器中编写"Ñ",则字符Ñ具有编辑器的编码,并且没有目标系统的编码.在这种情况下,你有Ñ编码为209,这给你'Ñ' == 209真实.  
执行字符集是指在操作系统和/或用于运行可执行(即编译)程序的控制台中使用的编码.很明显,编码是拉丁语1(ISO-8859-1).
特别是,当您在系统的控制台中键入Ñ时,它编码为165,在打印值时为您提供值165.
由于这种二分法总是可以发生(或不发生),你必须对此加以警惕,并做出一些调整,以避免潜在的问题.
当我使用unsigned char并使用165进行验证时,它的工作原理.但是当我使用cmd通过读取txt文件来尝试它时,它不起作用...
让我猜一下:您正在使用相同的IDE编写C代码和文本文件,但是您正在从Windows CMD执行程序.
这里有两种可能的解决方案.
复杂的解决方案是您调查编码模式,区域设置问题和宽字符.这里没有快速的解决方案,因为它需要注意几个微妙的东西.
简单的解决方案是对您正在使用的所有工具进行调整.
在CMD中执行命令CHCP以获取系统正在使用的代码页编号.此代码页是一个数字,其含义在我的Microsoft中解释,此处:
一个.OEM代码页
 
  b.Windows代码页
 
  c.ISO代码页
 
  d.所有WINDOWS CODEPAGES的列表  
我想你有代码页850或者好28591(对应于拉丁语1).
更改其中一个配置以适应另一个配置.
一个.在IDE的配置中,在"编辑器选项"部分中,您可以将编码更改为拉丁语1或ISO-8859-1.
湾 或者,通过CHCP命令更好地更改CMD中的代码页,以适应OEM 437编码:
CHCP 437
可能涉及CMD 中代码页更改的解决方案并不总是像预期的那样工作.
解决方案(a.)更安全:修改编辑器的配置.
但是,可以预先将UTF-8保留在编辑器中(如果这是编辑的选择),因为现在每个现代软件都转向UTF编码(Unicode).  
新信息:该UTF-8编码有时使用超过1个字节来表示1个字符.下表显示了前256个入口点的UTF-8编码:
注意:在评论中进行了一些讨论后,我意识到我对UTF-8编码有一些错误的认识.至少,这说明了我的观点:编码不是一件小事.
所以,我必须在此重复我对OP的建议:走最简单的路径,尝试与老师就如何处理特殊字符的编码达成协议.
| 归档时间: | 
 | 
| 查看次数: | 1344 次 | 
| 最近记录: |