C编程switch语句找到一个数字或字母
问题描述:
大家好,我试图从C语言编程书的问题由Brian W. Kernighan的(作者),丹尼斯·里奇M.(作者)。该手册提供的代码对于基本的逆波兰计算器,但我不明白#define NUMBER '0'
如何与switch语句一起工作:C编程switch语句找到一个数字或字母
它如何能够捕获所有的数字,尽管我们没有每个数字的情况。接下来的问题还要求我处理像sin
,cos
或pow
这样的案例。我假设也有类似的方式来做到这一点,但如果解释会帮助我更好。
的getop
得到下一个操作或数字操作数,push
和pop
是正规堆栈功能和atof
将ASCII转换浮动。
#define NUMBER '0'
int type;
double op2;
char s[100];
while ((type = getop(s)) != EOF) {
switch (type) {
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if (op2 != 0.0)
push(pop()/op2);
else
printf("error: zero divisor\n");
break;
case '%':
op2 = pop();
if (op2 != 0.0)
push((int)pop() % (int)op2);
else
printf("error: division by zero\n");
break;
case '\n':
printf("\t%.8g\n", pop());
break;
default:
printf("error: unknown command %s\n", s);
break;
}
}
return 0;
}
答
的C预编译器读取并分析你的源代码之前执行文本替换。 NUMBER
替换为'0'
,这是代表数字0
的字符的值。
当从输入中分析数字并将数字复制到s
时,函数getop()
可能会返回值'0'
。 atof()
将其转换为数字。
如果你有机会为getop()
的源代码,你会看到它是如何解析的数字,空格,注释和运营商。
注意,你不应该用浮点值使用%
。您应该改用fmod()
。
我猜'getop()''返回如果NUMBER'其参数's'恰好是数字。 – Hasturkun
看看'开关(类型)'行,直到启示来临。 –
@Hasturkun是啊,我看到了什么发生了感谢。 – cv14