gpt4 book ai didi

C编程switch语句查找数字或字母

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:29 26 4
gpt4 key购买 nike

大家好,我正在尝试 Brian W. Kernighan(作者)和 Dennis M. Ritchie(作者)所著的 C 编程语言书中的问题。这本书提供了基本反向波兰计算器的代码,但我不明白#define NUMBER '0' 如何与 switch 语句一起使用:

虽然我们没有每个数字的大小写,但它如何能够捕获所有数字。此外,接下来的问题要求我处理像 sincospow 这样的情况。我假设也有类似的方法可以做到这一点,但如果解释会更好地帮助我。

getop 获取下一个运算符或数字操作数,pushpop 是常规堆栈函数,atof 转换ascii 到 float 。

#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 的字符值。

函数 getop() 可能返回值 '0' 当从输入解析数字并将数字复制到 s . atof() 将其转换为数字。

如果您可以访问 getop() 的源代码,您将看到它如何解析数字、空格、注释和运算符。

请注意,您不应将 % 与浮点值一起使用。您应该改用 fmod()

关于C编程switch语句查找数字或字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44701997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com