基本if else语句

时间:2017-01-17 13:51:35

标签: c++

请考虑我编写的使用和if else语句

的代码
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    int a = 5;
    if(a)
    {
        printf("if %d\n" , ++a);
    }
    else
        printf("else %d\n" , a);
}

如果我设置int a = 5,则打印输出“if 6”

但如果我设置int a = 0,则会输出值“else 0”

为什么会发生这是什么原因?

3 个答案:

答案 0 :(得分:5)

++aa的值增加1,并且是一个等于递增值的表达式。

  1. a为5时,if (a)if (true)a为非零。所以printf("if %d\n" , ++a);运行,该语句中的++a递增a并计算到该递增值,6。

  2. a为0时,if (a)if (false)。所以printf("else %d\n" , a);运行。在这种情况下,a不会改变。

答案 1 :(得分:1)

我相信正在发生的事情是混淆了解if语句中发生的事情。

int main() {
    int a =5;
    if(a)
    {
        printf("if %d\n" , ++a);
    }
    else
        printf("else %d\n" , a);
    return 0;
}

此代码基本上等同于:

int main() {
    int a =5;
    printf("if %d\n" , ++a);
    return 0;
}
  

输出:6

如果a为0,则代码等同于:

int main() {
    int a =0;
    printf("else %d\n" , a);  // Notice no ++
    return 0;
}
  

输出:0

如果您要将代码编写为:

int main() {
    int a =5;
    printf("if %d\n" , a);  // Notice no ++
    return 0;
}
  

输出:5

if将评估存储在括号中的值,例如:

int a = 0;
if(a)  // since a is 0, the value equates to false and the if is ignored
{

}
else // since the if evaluated to false it will do the else.
{

}

在以下情况中:

int a = 5;
if(a) // a is non-zero therefore it equates to true, and the if body is ran
{

}
else // since the if was true the else is ignored, and its body wont be run.
{

}

现在让我们分析为什么在你的情况下a = 5打印出6。

在c ++中,有一些名为postfixprefix运算符的运算符,后缀运算符将在语句之后运行,而前缀运算符将在语句之前运行。

这些运算符将直接影响该值。

  

++ a - prefix运算符,在printf之前解析并检索值。

     

a ++ - postfix运算符,检索该值,然后在printf

之后解析      

a - 没有操作员只是检索值。

您可以在此处详细了解这些运算符: http://en.cppreference.com/w/cpp/language/operator_incdec

芭丝谢芭,答案是100%正确。发表这个答案,尝试并试图进一步理解,以及其他任何来到这里同样问题的人。

答案 2 :(得分:0)

以下是您的代码略有修改,以显示您要询问的两个案例。

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    int a;

    a = 5;
    if(a)   // check whether a is zero (false) or non-zero (true)
    {
        // variable a has a non-zero value (true)
        printf("if %d\n" , ++a);  // preincrement variable a then print value
    }
    else {
        // variable a has a value of zero (false)
        printf("else %d\n" , a);  // print value as it is
    }

    a = 0;
    if(a)   // check whether a is zero (false) or non-zero (true)
    {
        // variable a has a non-zero value (true)
        printf("if %d\n" , ++a);  // preincrement variable a then print value
    }
    else {
        // variable a has a value of zero (false)
        printf("else %d\n" , a);  // print value as it is
    }

    return 0;
}

变量的预增量(使用++ a)和变量的后增量(使用++)之间存在差异。

预增量,++ a,增加变量的值,并使新值可用于下一个操作符或操作。

后增量,即a ++,使变量的当前值可用于下一个操作符或操作,然后递增变量。

请看下面的代码。

int  a;
int  b;

a = 5;
b = a;    // straight assignment, no increment, b now contains 5.
b = a++;  // postincrement a, do assignment, b now contains 5, a contains 6
b = ++a;  // preincrement a, do assignment, b now contains 7, a contains 7

现在,在您的代码中,您首先为变量a指定值5。当您执行if时,检查a是否为真(值为非零)或为假(值为零)。由于a等于5,因此值为非零,然后它采用then路径。

当它printf()时,a的值被使用preincrement修改。这意味着a的值首先递增,然后在a中使用printf()的新值。因此,您打印预先增量变量a的值,这是6打印&#34;如果是6&#34;。

如果您使用了后增量,那么a的旧值将用于printf()`printing&#34;如果5&#34;。

接下来,将变量a的值设置为零。 if检查a是真,非零还是假,零,并且由于a现在为零或假,所采用的路径为else。在此printf()中,您只是打印变量a的值,因此您会看到&#34;否则为0&#34;。