| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 555 人关注过本帖
标题:请问枚举这里为什么编译失败了?
只看楼主 加入收藏
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
结帖率:25%
收藏
 问题点数:0 回复次数:9 
请问枚举这里为什么编译失败了?
# include <stdio.h>

int main(void)
{
    enum Color {red, yellow, blue, white, black};
    enum Color i, j, k, pri;
    int n, loop;
    n=0;
    for (i=red; i<=black; i++)//我这个是照着谭浩强的书里的例题打的,为什么在我的编译器里失败了
        for (j=red; j<=black; j++)
        ......

    return 0;
}
---------------------------
搜索更多相关主题的帖子: yellow include black white 
2015-03-24 09:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以前讨论过的话题   枚举型变量  不能进行自增运算

DO IT YOURSELF !
2015-03-24 09:47
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 2楼 wp231957
那谭浩强这本书这里他为什么又可以编译通过呢?
2015-03-24 10:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用msl12在2015-3-24 10:07:39的发言:

那谭浩强这本书这里他为什么又可以编译通过呢?



我猜你就会问这个问题  难道学习都学呆了吗  不知道 尽信书不如无书吗

你看到老谭亲自给你演示他书上的代码 都能够得到预期的结果吗

DO IT YOURSELF !
2015-03-24 10:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
为什么在我的编译器里失败了
------ 你的编译器是什么,是C编译器吗?如果是C编译器,不能编译通过那是你编译器的bug。

C语言是这么规定的:
Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type.

C++语言是这么规定的:
For an enumeration where emin is the smallest enumerator and emax is the largest, the values of the enumeration are the values of the underlying type in the range bmin to bmax, where bmin and bmax are, respectively, the smallest and largest values of the smallest bit-field that can store emin and emax.
2015-03-24 11:14
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 5楼 rjsp
恩,我用的是VC++6.0
2015-04-06 15:28
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 5楼 rjsp
貌似C语言中i++是可以的,在C++中默认是不行,但是VC++6.0编译失败。
2015-04-06 15:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
枚举中的数据,值可以是不连续的,递增递减没有任何意意义,那只是C的陋习,不是什么bug。

enum { a = 0, b = 1, c = 5, d = 10 }
以上是一个枚举集合,字面标识符a、b、c、d的值分别是0、1、5、10,当在b的位置++,结果是3,但这个值不在集合中,C代码允许,即是给这个集合无端添加了元素。这是人类逻辑错误。C++不允许这种操作,才是常理。

枚举是无序集合,不是有序渐变数列,这是概念。


[ 本帖最后由 TonyDeng 于 2015-4-6 21:25 编辑 ]

授人以渔,不授人以鱼。
2015-04-06 21:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用msl12在2015-4-6 15:35:36的发言:

貌似C语言中i++是可以的,在C++中默认是不行,但是VC++6.0编译失败。

VC++6.0是C++编译器。

授人以渔,不授人以鱼。
2015-04-06 21:07
wyj7668
Rank: 2
等 级:论坛游民
帖 子:16
专家分:24
注 册:2015-5-10
收藏
得分:0 
回复 楼主 msl12
我也刚学到这里,确实不能通过,我将程序改动如下:
# include<stdio.h>
int main ()
{
    int i,j,k,n=0;
    char *ball[]={"red","yellow","blue","white","black"};
    printf( "不同的取法如下:\n");
    for (i=0;i<5;i++)
    for (j=0;j<5;j++)
      if (ball[i]!=ball[j])
        for (k=0;k<5;k++)
        {   
            if ((ball[k]!=ball[i])&&(ball[k]!=ball[j]))
            printf ("%s,%s,%s\n",ball[i],ball[j],ball[k]);
        }
    return 0;   
}
2015-05-30 17:23
快速回复:请问枚举这里为什么编译失败了?
数据加载中...
 
   



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

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