您好,我是编程新手,正在用 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/

10-15 06:04