编写一个检查字符是否为字母的宏

Roh*_*gga 0 c algorithm debugging macros

我正在尝试编写一个宏IS_ALPHABETIC,如果一个字符是一个字母字符,它会给出一个非零值.在其中我指的是IS_LOWER_CASE我定义的uppercase宏和我之前定义的宏.

这是我有的:

#include <stdio.h>

#define uppercase(n)  ((n) <= 'Z' && (n) >= ('A') ) 
#define IS_LOWER_CASE(n) ( ((n) >= 'a') && ((n) <= 'z') )

#define IS_ALPHABETIC(n) (uppercase(n) || IS_LOWER_CASE(n) ? (n) : 5)

int main()
{
    char letter = "4";
    printf("%d\n", IS_ALPHABETIC(letter));
}
Run Code Online (Sandbox Code Playgroud)

因此,IS_ALPHABETIC如果参数是字母字符,那么本质上应该给出值5,因为它检查它是否是小写或大写字母字符,但是无论参数如何,它每次都给出5.

例如,在我的情况下,我输入4所以它不应该给出值5.它应该只在我输入字母值时.

uppercaseIS_LOWER_CASE宏只是检查参数是否为大写或小写,分别.

如果我IS_ALPHABETIC正确构建我的宏,我不是100%肯定.怎么了?

我正在尝试严格使用这些特定的宏.

Pau*_*l R 10

更改:

char letter= "4";
Run Code Online (Sandbox Code Playgroud)

至:

char letter= '4';
Run Code Online (Sandbox Code Playgroud)

同时启用编译器警告(例如gcc -Wall ...) - 让编译器为您捕获这样的愚蠢错误,并为您节省大量时间和精力.

请注意,您可能希望IS_ALPHABETIC返回TRUE/FALSE(1/0)而不是n或5.

在编程风格问题上,尝试更加符合命名,格式化,使用括号等,例如,这里是代码的清理版本:

#include <stdio.h>

#define IS_UPPER_CASE(n) ((n) >= 'A' && (n) <= 'Z') 
#define IS_LOWER_CASE(n) ((n) >= 'a' && (n) <= 'z')

#define IS_ALPHABETIC(n) (IS_UPPER_CASE(n) || IS_LOWER_CASE(n))

int main()
{
    char letter = '4';
    printf("%d\n", IS_ALPHABETIC(letter));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @XiJiaopin你重新编译了吗?使用`char letter ='A'`,它为我返回"65",而不是5 (2认同)