请考虑我编写的使用和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”
为什么会发生这是什么原因?
答案 0 :(得分:5)
++a
将a
的值增加1,并且是一个等于递增值的表达式。
当a
为5时,if (a)
为if (true)
,a
为非零。所以printf("if %d\n" , ++a);
运行,该语句中的++a
递增a
并计算到该递增值,6。
当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 ++中,有一些名为postfix
和prefix
运算符的运算符,后缀运算符将在语句之后运行,而前缀运算符将在语句之前运行。
这些运算符将直接影响该值。
++ 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;。