##萌新求助!!!为什么运行出来是空白呀??大佬们能不能告诉我代码错在哪里

B2052 简单计算器

AnZero @ 2021-08-25 16:29:35

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

by _lfxxx_ @ 2021-08-25 16:34:31

c 定义成 long long 了。


by 蛋蛋工作室 @ 2021-08-25 16:34:33

@AnZero c要用char类型


by AnZero @ 2021-08-25 16:39:01

@蛋蛋工作室 c为什么要用char???


by AnZero @ 2021-08-25 16:41:05

@蛋蛋工作室 我的第三个测试点是RE,为什么呀??


by 蛋蛋工作室 @ 2021-08-25 19:46:40

@AnZero

1.long long 是整型,不支持字符,所以要用char字符类型。

2.你的这段代码

if(c=='/')
    cout<<a/b;
if(b==0&&c=='/')
{
    cout<<"Divided by zero!";
    return 0;
}

先除再判断的话,如果b=0时就会RE。

可以在除之前先判断,也可以先判断是否为除再判断是否为0。

方法一:

if(b==0&&c=='/')
{
    cout<<"Divided by zero!";
    return 0;
}
if(c=='/')
{
    cout<<a/b;
}

方法二:(if嵌套)

if(c=='/')
{
    if (b==0)
    {
        cout<<"Divided by zero!";
    }
    else
    {
        cout<<a/b;
    }

最后还可以优化一下代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long a,b;
    char c;
    cin>>a>>b>>c;
    if(c=='+')
        cout<<a+b;
    else if(c=='-')
        cout<<a-b;
    else if(c=='*')
        cout<<a*b;
    else if(c=='/')
        if(b==0)
            cout<<"Divided by zero!";//这里用了方法二,并且return 0可以不要
    else
        cout<<"Invalid operator";//这里的return 0也可以不要
    return 0;
}

by 蛋蛋工作室 @ 2021-08-25 20:11:39

@AnZero

等等,我的这段代码有问题(为什么不按原来的改呢,还是太懒了)

    else if(c=='/')
        if(b==0)
            cout<<"Divided by zero!";//这里用了方法二,并且return 0可以不要
    else
        cout<<"Invalid operator";//这里的return 0也可以不要

这里有歧义,聪慧的C++会认为后面的else接的是上面的if,所以要加一个大括号。还有方法二我照抄都少抄了。

纠正如下:

    else if(c=='/')
    {
        if(b==0)
            cout<<"Divided by zero!";//这里用了方法二,并且return 0可以不要
        else
            cout<<a/b;//这里我竟然忘加了
    }
    else
        cout<<"Invalid operator";//这里的return 0也可以不要

by AnZero @ 2021-08-26 14:57:02

@蛋蛋工作室 好的,谢谢


by 蛋蛋工作室 @ 2021-08-26 15:51:30

@AnZero 不用谢


by yuyue_JOY @ 2021-08-27 21:36:25

用switch更方便

#include<iostream>
#include<cmath>
using namespace std;                
int main()
{ 
    int a,b,x;
    char c;
    cin>>a>>b>>c;
    switch(c)
    {
        case '+':cout<<a+b;break;
        case '-':cout<<a-b;break;
        case '*':cout<<a*b;break;
        case '/':
            if(b==0)
            {
                cout<<"Divided by zero!";break;
            }
            else 
            {
                cout<<a/b;break;
            }
            default:cout<<"Invalid operator!";break;
    }
    return 0;
}

|