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

C programming switch statements to find a number or a letter

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

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

getop 获取下一个运算符或数字操作数,pushpop 是常规堆栈函数,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()