C编程switch语句查找数字或字母
C programming switch statements to find a number or a letter
大家好,我正在尝试 Brian W. Kernighan(作者)和 Dennis M. Ritchie(作者)所著的 C 编程语言书中的问题。这本书提供了基本反向波兰计算器的代码,但我确实这样做了不明白 #define NUMBER '0'
如何使用 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()
可能 returns 值 '0'
。 atof()
将其转换为数字。
如果您可以访问 getop()
的源代码,您将看到它如何解析数字、白色 space、注释和运算符。
请注意,您不应将 %
与浮点值一起使用。您应该改用 fmod()
。
大家好,我正在尝试 Brian W. Kernighan(作者)和 Dennis M. Ritchie(作者)所著的 C 编程语言书中的问题。这本书提供了基本反向波兰计算器的代码,但我确实这样做了不明白 #define NUMBER '0'
如何使用 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()
可能 returns 值 '0'
。 atof()
将其转换为数字。
如果您可以访问 getop()
的源代码,您将看到它如何解析数字、白色 space、注释和运算符。
请注意,您不应将 %
与浮点值一起使用。您应该改用 fmod()
。