我正在用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退出,这意味着条件仍然不满足或者直接被忽略。
1条答案
按热度按时间uurv41yg1#
布尔值不是这样工作的,你将
float
的值与总是计算为true
的布尔值进行比较,但是这些比较并没有达到你所期望的效果。变成:
但是要注意浮点数上的
==
,因为它们可能不精确。同样:
很可能意味着:
此外,强烈建议您避免使用全局变量。数据应该通过函数的参数和返回值传递给函数或从函数传递。