A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝海悦 中级黑马   /  2015-6-20 17:26  /  3906 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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???

11 个回复

倒序浏览
确实是3  空语句的话 当a++表达式的值为2的时候停止循环     a的值会在计算完表达式+1 然后变成3

如果printf在循环体内部 那么就是2  
回复 使用道具 举报
kalon 来自手机 中级黑马 2015-6-20 20:32:21
藤椅
a++,++a(表达式的值)<a的值
回复 使用道具 举报
a++是先取a的值作为表达式的值然后在++
回复 使用道具 举报
循环到a=1时a++的值是1<2这是a的值加1,此时a等于2,
再循环时,a++的值是2=2,所以循环不继续,输出时a=2
回复 使用道具 举报
不管是a++,还是++a,最后a的值都需要+1的,只不过一个是先把a的值赋值,一个是把加完的值赋值
回复 使用道具 举报
一楼解释的有道理,围观学习
回复 使用道具 举报
   while (a++ < 2)        
                ;                    1.这是一个空语句       while不包括printf在内
   printf("%d\n",a);         2.当运行到a=2时,判断(a++<2)为“假”所以跳出while  这里a++是进行了一次最后的                              判断的      
                                     3.当运行到下一步prinft时,a++是要起作用的     使得a=3     
                                               
回复 使用道具 举报
a++表达式的值为2才可能退出循环,所以a自加一次,a就等于3,所以打印的值是3
回复 使用道具 举报
看着你的技术分,我很怀疑你是来抽贴的。。
回复 使用道具 举报
while循环退出的条件是a++表达式的值是2,当循环退出时a的值还会自加一次,所以最后打印的值是3
回复 使用道具 举报
因为你的while里面的约束条件是a++  <2 所以当你的a在执行完一次后的a的值变成了 1 然后2次时候a为2次是不满足while的约束了 虽不满足但还是完成了一次a++  和8楼说的差不多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马