为什么isalpha()不能用于小写字母?

use*_*777 1 c

在下面的代码中,如果字符是大写字母,则打印第一个语句,但是对于小写字母,打印第二个语句.这是什么原因?我正在使用dev c ++编译我的代码.

#include<stdio.h>
#include<conio.h>
#include<ctype.h>

int main()
{
    char c;
    printf("enter a character\n");
    scanf("%c",&c);

    int i;
    i=isalpha(c);
    if(i==1)
        printf("entered character is an alphabet\n");
    else
        printf("entered character is not an alphabet\n");

    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

int*_*jay 6

isalpha可以返回字母字符的任何非零值,而不仅仅是1.所以if(i==1)改为if(i).


das*_*ght 5

该标准不要求isalpha返回零或一.它要求它返回零或非零.任何非零值表示true:( 文档)

返回值

如果字符是字母字符,则为非零值(true),否则为0(false).

例如,ideone上安装的实现返回1024(演示).

if(i==1)代码更改为if(i!=0)甚至if(i)可以解决此问题.