while循环中的递增和递减

时间:2018-04-27 15:30:48

标签: c while-loop increment

这是我遇到问题的代码类型,只是一个例子:

 #include <stdio.h>
 #define TEN 10
 int main(void)
 {
     int n = 0;
     while (n++ < TEN)
         printf("%5d", n);
     printf("\n");
     return 0;
 }

这里,increment运算符首先在while循环内部工作,n得到1;然后它再次使用while循环的printf()语句,这样现在n得到2并且第一次执行printf()语句时打印“1”?因为否则,将打印“0”。我不确定它是否以这种方式工作,所以你能解释一下,就像我说的那样吗? PS:我没有老师,所以我问你们......

2 个答案:

答案 0 :(得分:4)

这里的技巧是++后缀运算符:它被称为后增量。表达式中使用的值,如果n 之前增量和n的值在下一个序列点之前的某个点更新,或者是表达式的结尾,函数调用或逗号运算符,是您不太可能很快就需要的高级运算符。

另一个警告是C中布尔值的特殊处理:比较如n < 10如果为真,则评估为1,否则为0。相反,没有比较的测试(例如if (n)对任何非零,非零和非NaN值都成功。

以下是事件序列:

  • int n = 0定义并初始化n类型的局部变量int为值0
  • while (n++ < TEN)nTEN进行比较,结果为真(C 1),因为0 < 10 然后 n会递增并获得值1。比较结果为真,因此while循环进入其命令语句。
  • printf("%5d", n);打印n的值,即1
  • 执行进入循环测试。
  • while (n++ < TEN)n再次与TEN进行比较,结果仍为1,因为1 < 10 然后 {{1增加并获得值n。比较结果为真,因此2循环进入其命令语句。
  • while打印printf("%5d", n);的值,即n。请注意,此输出与上一输出之间没有分隔符,也不存在下一个输出。
  • 执行进入循环测试。
  • ...重复这些步骤,直到打印2
  • 9while (n++ < TEN)n进行比较,结果为TEN,因为1 然后 9 < 10递增并获得值n。比较的结果仍然是正确的,因为比较是在增量之前执行的,因此10循环进入其命令语句。
  • while打印printf("%5d", n);的值,即n
  • 执行进入循环测试。
  • 10while (n++ < TEN)n进行比较,结果为假(C TEN),因为0&lt; 10 101 is not n **then** 11 is incremented and gets the value while循环停止,控件跳到下一个语句。
  • . The result of the comparison is false hence the打印换行符,结束输出行printf("\n");
  • 12345678910 return 0;函数返回退出状态为main,表示成功。

答案 1 :(得分:1)

n++post增量。请参阅标准n1570部分6.5.2.4

  

postfix ++运算符的结果是操作数的值。如   副作用,操作数对象的值递增(即   是,相应类型的值1被添加到它)。

while (n++ < TEN) /* 0 < 10 not 1 < 10 */ 
    printf("%5d", n);/* here incremented value gets printed */