验证ASCII字符的输入

时间:2014-09-02 23:25:03

标签: c char ascii

我有一个家庭作业问题。我必须验证大写字符的输入,但是我遇到了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文件来尝试它时,没有用...

2 个答案:

答案 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语句中,或使用开关对案例语句进行分组。你也可以使用一个查找数组来查找你知道大写的所有字符,但效率不会非常高。