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.它应该只在我输入字母值时.
在uppercase与IS_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)