@root为什么RE

mc_noch 2025-08-31 21:43:30 6
#include<bits/stdc++.h>
using namespace std;
long long a,b;
char c;
long long sum;
int main(){
    cin>>a>>b>>c;
    if(c!='+'&&c!='-'&&c!='*'&&c!='/')cout<<"Invalid operator!";
    if(b==0)cout<<"Divided by zero!";
    if(c=='+')sum=a+b;
    else if(c=='-')sum=a-b;
    else if(c=='*')sum=a*b;
    else if(c=='/')sum=a/b;
    cout<<sum;
}

好神奇,看起来也没有问题啊

{{ vote && vote.total.up }}

共 5 条回复

root 站长

全部用多分支。在判断了 b == 0, 输出提示信息后,你的程序会接着判断c的符号,并且执行除以0的操作,然后就re了

mc_noch
mc_noch

@root

#include<bits/stdc++.h>
using namespace std;
long long a,b;
char c;
long long sum;
int main(){
    cin>>a>>b>>c;
    if(c!='+'&&c!='-'&&c!='*'&&c!='/')cout<<"Invalid operator!";
    else if(b==0)cout<<"Divided by zero!";
    else if(c=='+')sum=a+b;
    else if(c=='-')sum=a-b;
    else if(c=='*')sum=a*b;
    else if(c=='/')sum=a/b;
    cout<<sum;
}
root 站长

回复里面艾特我,像这样 @root

root 站长

前面的if改成else if,因为 if 语句不管执行不执行,后面的语句都会依次执行,这里很明显是if(b==0),所以后面的a/b执行了,最终导致 re 错误。