| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 823 人关注过本帖
标题:为什么两个结果不一样
只看楼主 加入收藏
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
结帖率:100%
收藏
 问题点数:0 回复次数:7 
为什么两个结果不一样
程序代码:
#include<stdio.h>

int main()
{
    int x = 100;
    while(++x<103)
    printf("%4d",x);
    printf("%4d",x);
    return 0;
} 

程序代码:
#include<stdio.h>

int main()
{
    int x = 100;
    while(x++<103)
    printf("%4d",x);
    printf("%4d",x);
    return 0;
} 

第一个的答案是101 102 103
第二个的答案是101 102 103 104
为什么会多一个104的?
103<103不是假吗,不是应该跳出来输出103的吗,怎么会多一个104了?
2016-08-17 22:03
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
++x;先运算再比较。
x++;先比较再运算。
2016-08-17 22:45
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    int x = 100;
    while(++x<103)    //先自加1后再判断,第一次判断是101<103,然后进入循环体第一次输出101
    printf("%4d",x);  //这句属于循环体语句,最后一次输出为102,输出102后回到循环判断条件x为103,此时退出循环
    printf("%4d",x);  //这句输出103
    return 0;
}


程序代码:
#include<stdio.h>

int main()
{
    int x = 100;
    while(x++<103)   //先判断后自加1,第一次判断是100<103,然后x自加1为101,再进入循环体第一次输出101
    printf("%4d",x); //这句循环体语句,最后一次输出为103(此时是x作为102的判断后输出),然后进入最后次判断x为103,退出循环后,x再次自加1
    printf("%4d",x);//故这句最后输出104
    return 0;
}
2016-08-18 08:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
++x 这个表达式返回自增之x的值(未必需要先进行递增),副作用是x进行了自增
x++ 这个表达式返回自增之x的值(未必不可以先行递增),副作用是x进行了自增

记住 ++x、x++ 是个表达式
以 while(++x<103) 为例
千万不要看成 x先增或后增,然后x与103比较
记住,和103进行比较的不是x,而是(++x)这个表达式。
与 while( fun(x)<103 ) 一个道理,和103进行比较的不是x,而是fun(x)这个表达式。
2016-08-18 09:32
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
仔细想想看,还是rjsp大神表述的准确。
x++,++x。实际上都是运算后比较。由于两种表达式返回值不同,所以容易误解成先增后增。
例如:int x=0,x++==0,此时返回值是0,只有下一次调用x的时候才增加1;
    int x=0,++x==1;此时返回值是1。
感谢大神!!!
2016-08-18 10:15
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:0 
回复 5楼 linlulu001
表述还是有问题吧?

x++ 表达式的值是 x ,但 x 的值是有增加的,不管有没有被调用~

Read The Fucking Source Code~
2016-08-18 10:47
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
看来还是之前书上说的没有理解透彻,感谢rjsp的详解,学习了。
2016-08-18 10:48
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
收藏
得分:0 
谢谢各位大神的帮助!
2016-08-18 15:03
快速回复:为什么两个结果不一样
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024190 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved