c++ Else if语句被忽略

fdx2calv  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(167)

我正在用c++编写一个加法和减法计算器,我使用了两个空函数,一个用于用户界面,而用户可以选择使用加法或减法函数(或者也退出程序)。另一个由3个条件组成,第一个2是计算器必须做的代数运算,以便提供算术运算的结果。第三个是当用户没有t选择有效的选项,并将用户重定向到它开始的位置。
这里的问题是,第二个条件如果被忽略。例如,如果我输入“2”或“2.”,程序说输出“Invalid choice”,就好像第三个条件满足一样,但这并不确定。我如何解决这个问题?下面是代码:

#include <iostream>
#include <thread>

using namespace std;

float userInterfaceChoice;
float num1;
float num2;

void conditionals();

void userInterface()
{
    cout<<"CALCULATOR"<<endl
        <<""<<endl
        <<"Please choose an option"<<endl
        <<"1. Sum"<<endl
        <<"2. Subtraction"<<endl
        <<"3. Exit"<<endl;
    cin>>userInterfaceChoice;
    
    this_thread::sleep_for(1s);
    conditionals();
}

void conditionals()
{
    // Sum
    
    if(userInterfaceChoice==("1"||"1."))
    {
        // Input of numbers
        cout<<""<<endl
            <<"SUM"<<endl
            <<"Enter the first number"<<endl;
        cin >>num1;
        cout<<""<<endl
            <<"Enter the second number"<<endl;
        cin >>num2;
        
        // Operation & Output
        
        cout<<"The sum equals "<<num1+num2<<endl;
        
        // Wait 2 seconds, then come back to the GUI
        
        this_thread::sleep_for(2s);
        userInterface();
    }
    
    // Subtracion
    
    else if(userInterfaceChoice==("2"||"2."))
    {
        // Numbers input
        cout<<""<<endl
            <<"SUM"<<endl
            <<"Enter the first number"<<endl;
        cin >>num1;
        cout<<""<<endl
            <<"Enter the second number"<<endl;
        cin >>num2;
        
        // Operation & Output
        
        cout<<"The subtraction equals"<<num1-num2<<endl;
        
        // Wait 2 seconds, come back to the GUI
        
        this_thread::sleep_for(2s);
        userInterface();
    }
    
    //Invalid choice
    
     else if(userInterfaceChoice!=("1"&&"1."&&"2"&&"2."))
    {
        cout<<""<<endl
            <<"Invalid choice"<<endl;
        // Wait 2 seconds, come back to the GUI
        
        this_thread::sleep_for(2s);
        userInterface();
    }
}

// Execute the void functions

int main()
{
    userInterface();
    conditionals();
}

我试图通过删除第三个条件来解决这个问题,但是程序以退出代码0退出,这意味着条件仍然不满足或者直接被忽略。

uurv41yg

uurv41yg1#

布尔值不是这样工作的,你将float的值与总是计算为true的布尔值进行比较,但是这些比较并没有达到你所期望的效果。

userInterfaceChoice==("1"||"1.")

变成:

userInterfaceChoice == 1

但是要注意浮点数上的==,因为它们可能不精确。
同样:

userInterfaceChoice!=("1"&&"1."&&"2"&&"2.")

很可能意味着:

userInterfaceChoice != 1 && userInterfaceChoice != 2)

此外,强烈建议您避免使用全局变量。数据应该通过函数的参数和返回值传递给函数或从函数传递。

相关问题