| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2038 人关注过本帖
标题:另类的逗号表达式
只看楼主 加入收藏
hujin6186
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-11
收藏
 问题点数:0 回复次数:22 
另类的逗号表达式
程序是中的这句不懂while(scanf("%d%d",&m,&n),m<=0||n<=0)
它为什么表示的是赋值时要求m,n均大于0
还有这是逗号表达式吗,书上都没这种写法
搜索更多相关主题的帖子: 表达 另类 逗号 
2008-11-13 11:09
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
另类就不用啊

最鄙视那些非主流了

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2008-11-13 11:12
hujin6186
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-11
收藏
得分:0 
我也想不用,可是二级考试考到了。想把这个弄懂
2008-11-13 11:17
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>

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

    int m, n;
    /*
    while(scanf("%d%d",&m,&n),m<=0||n<=0)
        printf("m=%d n=%d\n", m, n);
    */
    //上面注释掉的等价于下面
    scanf("%d%d",&m,&n);
    while(m<=0 || n<=0){
        printf("m=%d n=%d\n", m, n);
        scanf("%d%d", &m, &n);
    }
    system("PAUSE");
    return 0;
}

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-11-13 11:18
dsr_dbh
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-10-29
收藏
得分:0 
如题。。
这种写法是合法的。。。逗号表达式的值是右边最后一个表达式的值。。
2008-11-13 11:18
hujin6186
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-11-11
收藏
得分:0 
谢谢ioriliao给出这么详细的解释,终于弄明白了。
2008-11-13 11:29
pdyang
Rank: 1
来 自:GP
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-11-3
收藏
得分:0 
真值,不是真值还运行下去吗
2008-11-13 15:03
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
while(scanf("%d%d",&m,&n),m<=0||n<=0)
等价于
do
{
    scanf("%d%d",&m,&n);
}while (m<=0 || n<=0);
可读性的确是后者好,但是占的代码行数略多
看各人习惯了
2008-11-13 20:24
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
[bo][un]p1s[/un] 在 2008-11-13 20:24 的发言:[/bo]

while(scanf("%d%d",&m,&n),m<=0||n<=0)
等价于
do
{
    scanf("%d%d",&m,&n);
}while (m<=0 || n<=0);
可读性的确是后者好,但是占的代码行数略多
看各人习惯了


明显不对嘛,注意人家的while()后面是没有分号的。
应该相当于4L所说的那样子。

其实可读性也没有怎么不好,就是读取->判断嘛,很自然的,只是没见过所以觉得厌恶吧。

这种表达式其实和自然语言很像,所以我经常用
while (scanf("%d%d", &m, &n), //读取
       m >= 0 && n >= 0) // 判断
   {
        //...
   }

不过,更常用的是这样的语法:
while (scanf("%d%d", &m, &n) == 2 && m >= 0 && n >= 0)
{
    //...
}

觉得还是很清晰的……

PS 最近禁网,因为要考试了,说不定某些人要因为我的消失而高兴一阵子呢~~
2008-11-13 20:35
langzi_feng
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-13
收藏
得分:0 
有点复杂,还不是我这样级别的人能看的懂啊1!
2008-11-13 20:40
快速回复:另类的逗号表达式
数据加载中...
 
   



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

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