【问题标题】:Telling my calculator to not divide by zero告诉我的计算器不要除以零
【发布时间】:2015-07-09 18:15:39
【问题描述】:

我正在用 C++ 制作一个计算器,它工作正常,除非我除以零。所以我有一个 if 语句说当一个数字被零除时给出消息“错误除以买零”。但是程序仍然崩溃。

这是我的代码

#include <iostream>

using namespace std;

int main()
{
    int a, b, d, s;
    d == a/b

    cout << "Enter first number\n";
    cin >> a;
    cout << "Enter second number\n";
    cin >> b;
    cout << "Select the operation you want\n";
    cout << "1.Addition\n";
    cout << "2.Subtraction\n";
    cout << "3.Multiplication\n";
    cout << "4.Division\n";
    cin >> s;

    switch (s)
    {
    case 1: cout << "Addition Selected\n"; a+b << endl;    break;
    case 2: cout << "Subtraction Selected\n"; a-b << endl; break;
    case 3: cout << "Addition Selected\n"; a*b << endl;    break;
    case 4:
        if (b==0)
        {
            cout << "Error Divide by Zero"<< endl;
        }
        else
        {
            cout << d << endl;
        }
    break;
    default: cout << "Invalid Selection" << endl;
    }

    return 0;
}

在我选择一个操作时,它并没有说它被选中。

【问题讨论】:

  • 你能把真实的代码贴出来吗?
  • 您似乎是在检查除以零之前执行除法。
  • 这会崩溃,还是无法构建?就像@cad 说的那样,您在检查 b == 0 之前执行 a/b。但是您也没有将除法的结果分配给 d。您正在对未初始化的 d 和 a/b 进行比较
  • 投票关闭,因为缺少示例,因为这不是真正的代码;它无法编译。
  • 在您知道任何值或选择了哪个操作之前,d == a/b 在那里做什么?

标签: c++ calculator division


【解决方案1】:

您的代码有很多语法错误

也许这可以帮助你。这巧妙地避免了除以零并打印错误消息。

#include <iostream>
using namespace std;

int main() {
    int n1, n2, ans;
    char op;
    cin >> n1 >> op >> n2;
    switch (op) {
    case '+':
        ans = n1 + n2;
        break;
    case '-':
        ans = n1 - n2;
        break;
    case '*':
        ans = n1 * n2;
        break;
    case '/':
        if (n2) {
            ans = n1 / n2;
            break;
        }
    default:
        cerr << "Invalid Input" << endl;
        return 1;
    }
    cout << ans;
    return 0;
}

参见http://ideone.com/wa8QJG 演示。

【讨论】:

  • 您应该有一个 else 子句用于除以零子句。这将允许错误处理(例如打印条件)。
  • 这更明智。更好的是为2+3等简单表达式编写解析器。
【解决方案2】:

你的线路

d == a/b;

需要

d = a/b;

它需要在“else”子句中移动。否则在打印解释错误之前会出现除以 0 错误。

您还缺少拆分案例的印刷品,应该添加。

【讨论】:

    【解决方案3】:

    您的代码中有许多拼写错误/语法错误。

    这是一个接近您的代码的可行解决方案:

    int main()
    {
        int a, b, d, s;
    
        cout << "Enter first number\n";
        cin >> a;
        cout << "Enter second number\n";
        cin >> b;
        cout << "Select the operation you want\n";
        cout << "1.Addition\n";
        cout << "2.Subtraction\n";
        cout << "3.Multiplication\n";
        cout << "4.Division\n";
        cin >> s;
        switch( s )
        {
        case 1:
            cout << "Addition Selected\n" << a + b << endl;
            break;
        case 2:
            cout << "Subtraction Selected\n" << a - b << endl;
            break;
        case 3:
            cout << "Multiplication Selected\n" << a * b << endl;
            break;
        case 4:
            if( b == 0 )
            {
                cout << "Error Divide by Zero" << endl;
            }
            else
            {
                d = a / b;
                cout << d << endl;
            }
    
            break;
        default:
            cout << "Invalid Selection" << endl;
        }
        return 0;
    }
    

    【讨论】:

    • 与问题中的错误相同:在检查零除法之前先除法。
    • 与原始代码相比,这确实是一个小问题。 d 是 nan 但从未使用过,因为显示了错误消息...
    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 2022-01-22
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多