【问题标题】:Why is if Statement not returning INFINITY? C++为什么 if 语句不返回 INFINITY? C++
【发布时间】:2020-09-16 13:31:54
【问题描述】:

我已经编写了这个程序,它应该打印 INFINITY 如果除以 0 例如根据代码 0/0 = infinity 因此输出不符合我的预期。我的代码有问题吗?还是我需要换一种方式?

#include <iostream>
using namespace std;

void optionMenu();
void userInput(char);

int main ()
{
    optionMenu();
    char userResult;
    cout << " Choice: ";
    cin >> userResult;
    userInput(userResult);
    return 0;
}
void optionMenu()
{
    cout << " Enter your choice" << '\n' ;
    cout << " + for Addition" << '\n';
    cout << " - for Subtraction" << '\n';
    cout << " * for Multiplication" << '\n';
    cout << " / for Division" << '\n';
}
void userInput(char userResult)
{
    int value1, value2;
    switch (userResult)
    {
        case '+':
        cout << " Enter your first Number: "; cin >> value1; cout << " Enter your second number: "; cin >> value2;
        cout << " The result for the Entered values is equal to: "; cout << (value1 + value2);
        break;

        case '-':
        cout << " Enter your first Number: "; cin >> value1; cout << " Enter your second number: "; cin >> value2;
        cout << " The result for the Entered values is equal to: "; cout << (value1 - value2);
        break;

        case '*':
        cout << " Enter your first Number: "; cin >> value1; cout << " Enter your second number: "; cin >> value2;
        cout << " The result for the Entered values is equal to: "; cout << (value1 * value2);
        break;

        case '/':
            if(!(value2))
                cout << "INFINITY" << '\n';
            else
        cout << " Enter your first Number: "; cin >> value1;
        cout << " Enter your second number: "; cin >> value2;
        cout << " The result for the Entered values is equal to: " << (value1 / value2) << '\n';
        break;

       default:
        cout << " Unidentified or Wrong Input / maybe not allowed! Try again." << '\n';
    }
}

【问题讨论】:

  • value2 在您到达 if(!(value2)) 行时未初始化 - 因此您的代码会调用 undefined behavior
  • else 分支就是cout &lt;&lt; " Enter your first Number: ";。阅读您最喜欢的 C++ 书籍中的块和花括号。
  • 重点是在要求用户输入之前检查了value2 的值。你需要把你的 if 在你输入值之后而不是之前
  • 您的代码绝对无效。当 value2 尚未初始化时,这是使用 value2 的未定义行为。
  • @Tahir 移动 if 语句,使其位于cin &gt;&gt; 语句之后。您不能在之前检查该变量的值。该变量具有值。

标签: c++


【解决方案1】:

当 value2 未初始化时,您在接收用户输入之前检查 value2 是否等于 0。

这样做:

case '/':
        cout << " Enter your first Number: "; cin >> value1;
        cout << " Enter your second number: "; cin >> value2;
        if(value2)
            cout << " The result for the Entered values is equal to: " << (value1 / value2) << '\n';
        else
            cout << "INFINITY" << '\n';
        break;

【讨论】:

    【解决方案2】:

    这很正常,因为您在这里使用 value2 而没有初始化,这是运行时失败:

    case '/':
            if (!(value2))
                std::cout << "INFINITY" << '\n';
    

    试试这个:

    case '/':
            std::cout << " Enter your first Number: "; std::cin >> value1;
            std::cout << " Enter your second number: "; std::cin >> value2;
            if (!(value2))
                std::cout << "INFINITY" << '\n';
            else
                std::cout << " The result for the Entered values is equal to: " << (value1 / value2) << '\n';
            break;
    

    【讨论】:

    • 感谢您分享您的知识)
    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 2015-05-06
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多