C ++:在评估if语句时不识别char值

时间:2017-10-05 00:38:54

标签: c++ function if-statement char comparison

每次运行此代码时,无论出于何种原因,无论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测试使用了=

3 个答案:

答案 0 :(得分:1)

因为您似乎分配了值(=),而不是检查它们(==)。此外,您应该使用else if块,以便更好地阅读。

答案 1 :(得分:0)

所有if语句分配=),而不是比较==)。

所以,改变一下:

if (StartUnit = 'f')

到此:

if (StartUnit == 'f')

并对其余的if语句采取类似行动。

答案 2 :(得分:0)

C ++有三个功能,它们结合在一起产生了这个问题:

  1. 在C,C ++和许多相关语言中,=(单个等号)和==(两个等号一起)之间存在差异。第一个是作业,第二个是比较。 StartUnit = 'f'表示“将StartUnit设置为值'f'”;你打算用StartUnit == 'f'
  2. 在很多语言中,赋值实际上是一个表达式,也有一个值。在这种情况下,它是指定的值,因此StartUnit = 'f'表示“将StartUnit设置为f,并返回值'f'”。由于它位于if语句中,因此设置StartUnitif ('f')
  3. if语句或其他布尔操作查看intfloatchar等时,它会检查它们是否为非零。由于'f'不是Nul字节'\x00'(并且都不是'0'),因此它的计算结果为true,并执行if语句体。
  4. 由于所有这些if语句都以相同的方式工作,因此所有这些语句都会发生,并且所有函数都会运行。

    您可能还想使用else子句,甚至是switch语句。一堆if语句一个接一个地看起来像没有,任何或所有语句都可以运行。由于您只需要一个且只有一个,您应该使用else块或switch语句。