每次运行此代码时,无论出于何种原因,无论if
语句的计算结果是否为真,它都会调用所有函数
int main()
{
char StartUnit, EndUnit;
double StartVal = 0, EndVal = 0;
double CalcVal = 0;
static double result = 0;
//Receive user input
cout << "Please enter the unit which you would like to convert from: ";
cin >> StartUnit;
cout << "What is your initial value?: ";
cin >> StartVal;
cout << "Please enter the unit which you would like to convert to: ";
cin >> EndUnit;
//Step 1: Convert input to celsius
if (StartUnit = 'f')
{
CalcVal = FarCel(StartVal);
}
if (StartUnit = 'k')
{
CalcVal = KelCel(StartVal);
}
if (StartUnit = 'r')
{
CalcVal = RakCel(StartVal);
}
//Step 2: Conver celsius to desired value
cout << CalcVal;
return 0;
}
当我输出CalcVal时,无论如何,它似乎贯穿所有三个函数。我键入的内容并不重要,r,c,f,它们都评估相同。我可以就我出错的地方提出一些建议吗?
已解决:问题的答案是==
用于比较,我的if
测试使用了=
答案 0 :(得分:1)
因为您似乎分配了值(=),而不是检查它们(==)。此外,您应该使用else if
块,以便更好地阅读。
答案 1 :(得分:0)
所有if语句分配(=
),而不是比较(==
)。
所以,改变一下:
if (StartUnit = 'f')
到此:
if (StartUnit == 'f')
并对其余的if语句采取类似行动。
答案 2 :(得分:0)
C ++有三个功能,它们结合在一起产生了这个问题:
=
(单个等号)和==
(两个等号一起)之间存在差异。第一个是作业,第二个是比较。 StartUnit = 'f'
表示“将StartUnit
设置为值'f'
”;你打算用StartUnit == 'f'
。StartUnit = 'f'
表示“将StartUnit
设置为f
,并返回值'f'
”。由于它位于if
语句中,因此设置StartUnit
和if ('f')
。if
语句或其他布尔操作查看int
,float
,char
等时,它会检查它们是否为非零。由于'f'
不是Nul字节'\x00'
(并且都不是'0'
),因此它的计算结果为true,并执行if
语句体。由于所有这些if
语句都以相同的方式工作,因此所有这些语句都会发生,并且所有函数都会运行。
您可能还想使用else
子句,甚至是switch
语句。一堆if
语句一个接一个地看起来像没有,任何或所有语句都可以运行。由于您只需要一个且只有一个,您应该使用else
块或switch语句。