免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5350 | 回复: 14
打印 上一主题 下一主题

[C] 问个枚举的问题, 枚举名是什么类型的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-27 15:11 |只看该作者 |倒序浏览
枚举中,有没有办法 printf 一个枚举名



main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
j++;
if (j>d) j=a;
}
for(i=1;i<=30;i++){
switch(month[i])
{
case a:printf(" %2d %c\t",i,'a'); break;
case b:printf(" %2d %c\t",i,'b'); break;
case c:printf(" %2d %c\t",i,'c'); break;
case d:printf(" %2d %c\t",i,'d'); break;
default:break;
}
}
printf("\n");
}

   有没有办法输出enum 中的常量?

   比如我改为:

  1. printf (" %2d %s\t", i, month[i]);
复制代码


   结果不显示了

[ 本帖最后由 chenzq1604 于 2008-9-27 15:18 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-09-27 15:19 |只看该作者
改成 printf (" %2d %d\t", i, month[i]); 试试 用 %s要小心些

论坛徽章:
0
3 [报告]
发表于 2008-09-27 15:53 |只看该作者
原帖由 5毛党党员 于 2008-9-27 15:19 发表
改成 printf (" %2d %d\t", i, month); 试试 用 %s要小心些



这样不行的,输出是
  1. mouth[i]为0
复制代码
,如果输出month等于是

-1074931684

[ 本帖最后由 chenzq1604 于 2008-9-27 16:01 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-09-27 16:01 |只看该作者
原帖由 chenzq1604 于 2008-9-27 15:53 发表



这样不行的,输出是0,等于是

-1074931684

  1 0     1 a
  2 1     2 b
  3 2     3 c
  4 3     4 d
  5 0     5 a
  6 1     6 b
  7 2     7 c
  8 3     8 d
  9 0     9 a
10 1    10 b
11 2    11 c
12 3    12 d
13 0    13 a
14 1    14 b
15 2    15 c
16 3    16 d
17 0    17 a
18 1    18 b
19 2    19 c
20 3    20 d
21 0    21 a
22 1    22 b
23 2    23 c
24 3    24 d
25 0    25 a
26 1    26 b
27 2    27 c
28 3    28 d
29 0    29 a
30 1    30 b
我这的输出。。。

论坛徽章:
0
5 [报告]
发表于 2008-09-27 16:04 |只看该作者
枚举是整型的,enum body { a,b,c,d } ,a=0,b=1,......

论坛徽章:
0
6 [报告]
发表于 2008-09-27 16:06 |只看该作者
原帖由 doswin 于 2008-9-27 16:04 发表
枚举是整型的,enum body { a,b,c,d } ,a=0,b=1,......

好像c和c++这一点不太一样

我用.cpp的时候
[test@bogon foo1]$ g++ test26.cpp
test26.cpp: In function `int main()':
test26.cpp:9: error: no `operator++(int)' declared for postfix `++', trying prefix operator instead
test26.cpp:9: error: no match for 'operator++' in '++j'
报错

.c就是正常的

论坛徽章:
0
7 [报告]
发表于 2008-09-27 16:08 |只看该作者
你想打印枚举量,打印出来的是int型,要么你自己做字符串转换,然后按%s输出。

论坛徽章:
0
8 [报告]
发表于 2008-09-27 16:13 |只看该作者
原帖由 doswin 于 2008-9-27 16:04 发表
枚举是整型的,enum body { a,b,c,d } ,a=0,b=1,......


以你的要求應該是:
  1. enum body { a=1,b,c,d }
复制代码


還有,你的功能用struct結合指針就行啦

[ 本帖最后由 恋夏寒 于 2008-9-27 16:15 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-09-27 16:20 |只看该作者
原帖由 5毛党党员 于 2008-9-27 16:01 发表

  1 0     1 a
  2 1     2 b
  3 2     3 c
  4 3     4 d
  5 0     5 a
  6 1     6 b
  7 2     7 c
  8 3     8 d
  9 0     9 a
10 1    10 b
11 2    11 c
12 3    12 d
13 0    13 a ...


    可能我没有表达清楚,我把代码修改为这个就容易懂了

#include <stdio.h>
#include <stdlib.h>

int
main (void)
{
  enum body
  { aa, bb, cc, dd  } month[31], j;
  int i;
  j = aa;
  for (i = 1; i <= 30; i++)
    {
       month[i] = j;
      j++;
      if (j > dd)
        j = aa;
    }
  for (i = 1; i <= 30; i++)
    {
      switch (month[i])
        {
        case aa:
          printf (" %2d %d\t", i, month[i]);
          break;
        case bb:
          printf (" %2d %d\t", i, month[i]);
          break;
        case cc:
          printf (" %2d %d\t", i, month[i]);
          break;
        case dd:
          printf (" %2d %d\t", i, month[i]);
          break;
        default:
          break;
        }
    }
  printf ("\n");
}

那现在的输出是:
  1.   1 0     2 1     3 2     4 3     5 0     6 1     7 2     8 3     9 0    10 1    11 2    12 3    13 0    14 1    15 2    16 3    17 0    18 1    19 2    20 3    21 0    22 1 23 2    24 3    25 0    26 1    27 2    28 3    29 0    30 1
复制代码


   有没有办法变成:
  1.   1 aa     2 bb     3 cc     4 dd     5 aa     6 bb     7 cc................
复制代码

论坛徽章:
0
10 [报告]
发表于 2008-09-27 16:22 |只看该作者
。。。你都switch case 了,为啥不直接打 aa bb cc dd?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP