您好,我是编程新手,正在用 C 编写程序。
在我的头文件中,我有这个宏:
#define yesno(c) (c==ENTER || c==' ' || c=='\t') ? ENTER : ESC
在我的程序中,我有这个代码
char keypressed()
{ char c;
c =getch();
return yesno(getch());
}
所以我想问的是,为什么当我要求返回
yesno(c)
时我只需要按一次按钮,而当我使用 return yesno(getch())
时我必须再按一次按钮两次或三次?从宏调用时
getch()
是否有问题? 最佳答案
因为当你使用
yesno(getch());
它扩展为:
(getch()==ENTER || getch()==' ' || getch()=='\t') ? ENTER : ESC`
当宏像这样展开时,意味着
getch()
实际上可以被调用 1、2 或 3 次,因为逻辑 ||
意味着:getch() == '\n' ? if true return ENTER, false test next one
getch() == ' ' ? if true return ENTER, false test next one
getch() == '\t' ? if true return ENTER, false return ESC
如果您使用
gcc
编译器,您可以使用 -E
标志找出您的宏扩展为什么:gcc -E myprog.c -o mprog.m
关于c - getch 需要额外的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13402571/