【问题标题】:else and if statementelse 和 if 语句
【发布时间】:2013-06-07 01:13:21
【问题描述】:

世界!

我目前正在自学 C++。我正在阅读原理和使用 C++ 进行练习,并且在为其中一个练习编写程序时,我对一个我没想到的程序的结果感到好奇。如果有人能解释为什么会这样就好了

源码如下:

#include<iostream>

using namespace std;

int main()
{
    double val1 = 0;
    double val2 = 0;

    cout << "Enter two floating point values: ";
    cin >> val1 >> val2;

    cout << val1 + val2 << '\n'
         << val1 * val2 << '\n'
         << val1 / val2 << '\n';

    if(val1 > val2)
    {
        cout << val1 << " greater \n";
        cout << val2 << " lesser \n";
    }

    if(val1 == val2)
    {
        cout << val1 << " equals other floating point value \n";
        cout << val2 << "equals other floating point value \n";
    }

    else
    {
        cout << val2 << " greater \n";
        cout << val1 << " lesser \n";
    }

    system("PAUSE");
}

当我输入 6.9 和 5.4 之类的内容时,它会给出以下输出:

大于 6.9 5.3 较小

5.3 以上 6.9 较小

我已经通过将 else 语句更改为 if 语句解决了这个问题,但是有人可以告诉我为什么当我使用 else 语句时它会给出这个输出。谢谢!

【问题讨论】:

    标签: c++ if-statement runtime


    【解决方案1】:

    您的代码应如下所示:

    if(val1 > val2)
    {
        cout << val1 << " greater \n";
        cout << val2 << " lesser \n";
    }
    
    else if(val1 == val2)
    { //^^you missed this else
    
        cout << val1 << " equals other floating point value \n";
        cout << val2 << "equals other floating point value \n";
    }
    
    else
    {
        cout << val2 << " greater \n";
        cout << val1 << " lesser \n";
    }
    

    如果你错过了else,逻辑就很清楚了。具体来说,它将执行第一个if 块。如果您没有 else,请转到 else 块。

    【讨论】:

      【解决方案2】:

      您的else 仅附加到第二个if,因此除非val1val2 相等,否则您的代码将进入else 块。

      要使用 else 获得您想要的行为,您还必须在第二个 if 之前使用它:

      if(val1 > val2)
      {
          cout << val1 << " greater \n";
          cout << val2 << " lesser \n";
      }
      
      else if(val1 == val2)
      {
          cout << val1 << " equals other floating point value \n";
          cout << val2 << "equals other floating point value \n";
      }
      
      else
      {
          cout << val2 << " greater \n";
          cout << val1 << " lesser \n";
      }
      

      【讨论】:

      • 感谢所有回复!我现在明白了。我刚刚放了个屁。
      【解决方案3】:

      以下代码:

      if(val1 == val2) {
         cout << val1 << " equals other floating point value \n";
         cout << val2 << "equals other floating point value \n"; 
      }
      
      else {
         cout << val2 << " greater \n";
         cout << val1 << " lesser \n"; 
      }
      

      6.9 != 5.4,所以它转到"else" 部分并给你第二个输出

      【讨论】:

        【解决方案4】:

        你有一个 else 为第二个工作,如果这样 val2>val1 条件将在每次 == 条件为假时工作。 可以有很多解决方案。

        【讨论】:

          【解决方案5】:

          else 语句与最近的 if 语句相关联。比如你写了

          if(val1>val2)
          {
            // do something
          } 
          if(val1==val2)
          {
             // do something
          } 
          else
          {
             // do something
          }
          

          这里的“else”语句与最近的 if(val1==val2) 相关联。听,说 val1=10 & val2=9 现在首先将测试“val1>val2”条件。它是真的(10>9 是真的)然后第二个如果条件 'val1==val2' 将被测试它是假的(10==9 是假的),现在 'else' 意味着最接近的 'if' 是错误的。如果答案是肯定的,则执行“其他”下的陈述。所以认为是简单的英语。当你用 ELSE ,, 给你的朋友一个条件时,你的朋友必须问哪个是与 IF 相关的条件。所以你的错是你想把 'else' 当作 'if(val1

          【讨论】: