请问,我代码这样写哪里错了?(c 语言)


求助,我代码这样写哪里错了:

#include <stdio.h>
#include <stdbool.h>
int main(void) {
    char input[1000];
    int currentnumber = 0,result = 0;
    bool error = false;
    char lastOp = '+';
    int i = 0;
    fgets(input, sizeof(input), stdin);
    while(input[i] != '\0') {
        if(input[i] >= '0' && input[i] <= '9') {
            currentnumber = currentnumber*10 + (input[i] - '0');
        }else {
            switch(lastOp) {
                case '+':
                    result += currentnumber;
                break;
                case '-':
                    result -= currentnumber;
                break;
                case '*':
                    result *= currentnumber;
                break;
                case '/':
                    if(currentnumber != 0) {
                        result /= currentnumber;
                    }else {
                        error = true;
                    }
                break;
                case '=':
                    printf("%d\n", result);
                    return 0;
                default:
                    error = true;
                break;
            }
            currentnumber = 0;
            lastOp = input[i];
        }
        if(error) {
            printf("Error\n");
            return 1;
        }
        i++;

    }

    return 0;
}

lz 可以学学用 IDE 的 debug 功能或者用 gdb 来 debug. 在程序运行过程中追踪你觉得可能会出错的变量,看看和自己预期的结果是否一致。

或者可以让 gpt 帮你写一个程序,看看你们写的哪不一样

显然,43 行 return 1 应当改成 return 0(

2 Likes

人生苦短我用 python

print(eval(input()[:-1]))

鼠鼠眼神可能不太好,没见到判断算符优先级的代码逻辑。俺之前写了一段,可以参考参考,用的是算符优先级算法判断运算过程
实验三:C 语言实现直观算符优先分析法.pdf (312.4 KB)