黑马程序员技术交流社区

标题: while空语句问题 [打印本页]

作者: 蓝海悦    时间: 2015-6-20 17:26
标题: while空语句问题
  1. #include <stdio.h>
  2. int a = 0;

  3. int main(int argc, const char * argv[]) {

  4.    
  5.     while (a++ < 2);
  6.    
  7.     printf("%d\n",a);   

  8.     return 0;
  9. }
复制代码
为什么输出结果不是2,  而是3???

作者: 晗修    时间: 2015-6-20 18:46
确实是3  空语句的话 当a++表达式的值为2的时候停止循环     a的值会在计算完表达式+1 然后变成3

如果printf在循环体内部 那么就是2  
作者: kalon    时间: 2015-6-20 20:32
a++,++a(表达式的值)<a的值
作者: 天下1083    时间: 2015-6-20 20:52
a++是先取a的值作为表达式的值然后在++
作者: 天下1083    时间: 2015-6-20 20:57
循环到a=1时a++的值是1<2这是a的值加1,此时a等于2,
再循环时,a++的值是2=2,所以循环不继续,输出时a=2
作者: 萤火虫小oneone    时间: 2015-6-20 21:40
不管是a++,还是++a,最后a的值都需要+1的,只不过一个是先把a的值赋值,一个是把加完的值赋值
作者: 白0702    时间: 2015-6-20 22:43
一楼解释的有道理,围观学习
作者: DemonPeter    时间: 2015-6-20 23:05
   while (a++ < 2)        
                ;                    1.这是一个空语句       while不包括printf在内
   printf("%d\n",a);         2.当运行到a=2时,判断(a++<2)为“假”所以跳出while  这里a++是进行了一次最后的                              判断的      
                                     3.当运行到下一步prinft时,a++是要起作用的     使得a=3     
                                               
作者: pp584995727    时间: 2015-6-22 22:41
a++表达式的值为2才可能退出循环,所以a自加一次,a就等于3,所以打印的值是3
作者: 丁铭检    时间: 2015-6-23 09:58
看着你的技术分,我很怀疑你是来抽贴的。。
作者: pp584995727    时间: 2015-6-23 22:08
while循环退出的条件是a++表达式的值是2,当循环退出时a的值还会自加一次,所以最后打印的值是3
作者: 星期九    时间: 2015-6-24 11:01
因为你的while里面的约束条件是a++  <2 所以当你的a在执行完一次后的a的值变成了 1 然后2次时候a为2次是不满足while的约束了 虽不满足但还是完成了一次a++  和8楼说的差不多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2