-1

可能重复:
后增量和前增量概念?

在这种情况下,我无法理解“if 条件”如何与增量/减量运算符一起使用:

#include<stdio.h> 
void main() 
{ 
  int n=0; 
  if(n++) 
  { 
    printf("C-DAC"); 
  } 
  else if(n--) 
  { 
    printf("ACTS"); 
  } 
}

它的输出是ACTS。

IF 条件下发生了什么?

4

10 回答 10

24

if (n++)它检查是否n不等于零,然后递增n

else if (n--)它检查是否n不等于零,然后递减n

您的第一个if语句不正确(因为n为零),然后n递增,并else if检查语句(n此时等于 1),if (1)为真并被printf("ACTS")调用

于 2012-06-15T11:50:14.457 回答
3

n++和都是递增/递减n--操作。

这意味着变量的值首先用于当前表达式中的评估,然后才更改,(即,随后递增/递减)。

0在布尔表达式中表示 FALSE。由于nis initial 0,您的第一个测试if失败并且该else子句被评估。

由于在第一个测试中,此时n已成为,因此这导致该测试变为真,并且1n++

printf("ACTS"); 

被执行。

于 2012-06-15T11:54:13.240 回答
3

if(0++) ==> if(0) else if(1--) ==> else if(1)

所以打印ACTS

于 2012-06-15T12:23:16.897 回答
2
int n=0; 
if(n++)

含义:检查然后加 1。

int n=0; 
if(++n)

含义:加1,然后检查。

于 2012-06-15T11:52:58.527 回答
2

一个 int 总是给出真值,除非它为零。后增量运算符 ,在检查后i++递增i变量。如果您使用了预增量运算符 ,++i则增量将在检查之前进行。

于 2012-06-15T11:54:12.927 回答
2

在检查您的IF部分时,n的值为“ 0 ”。由于i++, ' n ' 增加1。所以,现在n的值为1。因此,在输入ELSE部分时,由于n的值为1,它执行ELSE部分。你得到了ELSE零件的输出。

于 2012-06-15T11:55:52.080 回答
1

它首先检查条件,然后n != 0它会增加 n 的值

于 2012-06-15T11:51:55.753 回答
1

++and--运算符不仅修改值,它们还有返回值。行为因位置而异:++var增加并返回增加的值,而var++增加但返回旧值。

于 2012-06-15T11:53:37.790 回答
1

因为 i 为 0。++i会在评估前递增,在评估i++后递增

于 2012-06-15T13:04:57.013 回答
0

编译器以从左到右的方式读取命令。意味着首先它检查条件是否为真或假

if (n) 

然后递增/递减

 n = n +/- 1
于 2012-06-15T11:52:32.303 回答