枚举类型的问题

jerry316355 2012-08-18 02:07:20
我搞不懂这是为什么~~~
...全文
385 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2012-08-19
  • 打赏
  • 举报
回复
留下签名

楼主珍重

<====

推荐 C PRIMER
whucv 2012-08-18
  • 打赏
  • 举报
回复
如下,在cpp文件中正确
#include<stdio.h>
void main ()
{
enum color
{
red,yellow,blue,white,black
};
enum color i,j,k;
for (i=red;i<=black;i=(enum color)(i+1))
for (j=red;j<=black;j=(enum color)(j+1))
if (i!=j)
for (k=red;k<=black;k=(enum color)(k+1))
{
printf("a");
}
}
whucv 2012-08-18
  • 打赏
  • 举报
回复
如果是C++程序,则源文件的扩展名应为.cpp,对于VisualC++6.0来说,默认新建源文件为C++文件。
如果你想运行《C程序设计 谭浩强》中的c语言程序,最好将代码的源文件扩展名改为.c再进行编译。


whucv 2012-08-18
  • 打赏
  • 举报
回复
是这样的,
在c语言中,默认枚举变量的值是从0开始递增的,所以可以
将color类型的值赋给int型的值i,j,k,
C语言的枚举类型实质就是整型变量,所以能进行自加和自减。
在C语言中
enum color i,j,k;
for (i=red;i<=black;i++)

是可以这样写的,但是C++有更严格的类型检查,不允许对枚举变量做++或--,主要是避免超出有效值范围。
如果你确实需要把枚举变量+1,可以这样写
a1 = (enum a)( a1 + 1 );
进行强制类型转换
yimingxinshou 2012-08-18
  • 打赏
  • 举报
回复
好像那个自加运算在c中可以,c++中不可以
yimingxinshou 2012-08-18
  • 打赏
  • 举报
回复
我用visual c++ 6.0调试的也是这个问题,明明是跟课本上一字不差,还是不行,可能是编译器不支持枚举变量自加吧。把enum color i,j,k;改为int i,j,k;就行了。我调试过,改为int类型没问题,以后还是不要把枚举类型做自加等运算了,毕竟有编译器不支持,还是用int类型吧
下面是我写的代码
# include <stdio.h>
void main()
{
enum Color{red,yellow,blue,white,black};
int i,j,k,pri;
int n=0,loop;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
{
if(i!=j)
{
for(k=red;k<=black;k++)
if((k!=i)&&(k!=j))
{
n++;
printf("第%4d种取法为:\t",n);
for(loop=0;loop<3;loop++)
{
switch(loop)
{
case 0:pri=i;break;
case 1:pri=j;break;
case 2:pri=k;break;
default:printf("error!");break;
}
switch(pri)
{
case red: printf("%-10s","red");break;
case yellow:printf("%-10s","yellow");break;
case blue: printf("%-10s","blue");break;
case white: printf("%-10s","white");break;
case black: printf("%-10s","black");break;
default: printf("error!");break;
}
}
printf("\n");
}
}
}
printf("一共有%4d种取法\n",n);
}
jerry316355 2012-08-18
  • 打赏
  • 举报
回复
我用的是VC2010 学习版
whucv 2012-08-18
  • 打赏
  • 举报
回复

VC6.0是正确的


#include<stdio.h>
void main ()
{
enum color
{
red,yellow,blue,white,black
};
enum color i,j,k;
for (i=red;i<=black;i++)
for (j=red;j<=black;j++)
if (i!=j)
for (k=red;k<=black;k++)
{
printf("a");
}
}
帅得不敢出门 2012-08-18
  • 打赏
  • 举报
回复
你编译的时候用g++的话就会error
用gcc的话就没有问题。

jerry316355 2012-08-18
  • 打赏
  • 举报
回复
Error 在i++ j++ k++的位置
为什么书上是这么写的 (C程序设计 谭浩强)
帅得不敢出门 2012-08-18
  • 打赏
  • 举报
回复
//enum color i,j,k;
int i,j,k;
jerry316355 2012-08-18
  • 打赏
  • 举报
回复
  
#include<stdio.h>
void main ()
{
enum color
{
red,yellow,blue,white,black
};
enum color i,j,k;
for (i=red;i<=black;i++)
for (j=red;j<=black;j++)
if (i!=j)
for (k=red;k<=black;k++)
}

jerry316355 2012-08-18
  • 打赏
  • 举报
回复

Error:枚举类型上的此操作需要适用于用户定义的运算符函数

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧