我有一个家庭作业问题。我必须验证大写字符的输入,但是我遇到了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文件来尝试它时,没有用...
答案 0 :(得分:2)
165
不是ASCII码。 ASCII从0到127. 165是其他字符集中的代码。在任何情况下,char
都必须使用scanf
,之后您可以将值转换为unsigned char
。或者,使用getchar()
返回unsigned char
范围内的值。
您应该使用isalpha
中的标准函数ctype.h
:
int n = getchar();
if ( isalpha(n) )
{
// do something...
}
您可能还需要设置此字符为字母的区域设置,例如setlocale( LC_CTYPE, "es_ES");
答案 1 :(得分:0)
对于所有扩展的ASCII字符,您需要一个unsigned char。在您的情况下,您需要检查所有被认为是您的语言大写的字符,而不仅仅是英文字符。您可以将这些作为条件或条件添加到if语句中,或使用开关对案例语句进行分组。你也可以使用一个查找数组来查找你知道大写的所有字符,但效率不会非常高。