RE和WA求调

B2052 简单计算器

LTsurvive @ 2025-01-11 10:45:02

写了两个,第一个提交是RE,第二个是WA,并且测试点变一个了

#include <bits/stdc++.h>
using namespace std;

int main(){
    int one,two;
    char f;
    cin>>one>>two>>f;
    if(two==0&&f=='/'){
        cout<<"Divided by zero!"<<endl;
    }
    if(f=='+'){
        cout<<one+two<<endl;
    }else if(f=='-'){
        cout<<one-two<<endl;
    }else if(f=='*'){
        cout<<one*two<<endl;
    }else if(f=='/'){
        cout<<one/two<<endl;
    }else{
        cout<<"Invalid operator!"<<endl;
    }
}
#include <bits/stdc++.h>
using namespace std;

int main(){
    int a,b,y;
    char c;
    cin>>a>>b>>c;
    bool x;
    switch (c) {
    case '+':
        y=a+b;
        break;
    case '-':
        y=a-b;
        break;
    case '*':
        y=a*b;
        break;
    case '/':
        if(b==0){
            x=true;
        }else{
            y=a/b;
        }
        break;
    default:
        cout<<"Invalid operator!"<<endl;
        exit(0);
    }
    if(x){
        cout<<"Divided by zero!"<<endl;
    }else{
        cout<<y<<endl;
    }
}

by nnh915 @ 2025-01-11 10:52:57

第一个程序的问题在于逻辑上。判断完除0的可能性后,不应再执行后面的部分。在这个程序中,有两个分支,应合并成一个。把判断除0后面的 if 改为 else if


by nnh915 @ 2025-01-11 10:56:30

第二个程序的问题可能在于 变量x 没有初始化。局部变量没有初始化时,其值为随机数。比如当 x 随机到1时,就失去了判断的效果,会误判正确的算式。


by LTsurvive @ 2025-01-11 11:47:47

@nnh915感谢感谢终于AC了/(ㄒoㄒ)/~~


|