枚举类型 望高手解答。。。

pclvmm 2010-07-17 10:39:59
#include <stdio.h>
main()
{
int i,k;
enum year{JAN=1,FEB,MAR,APR,AUG,SEP,OCT,NOV,DEC}month[9],j;
printf("\nPlease Input The Month:");
scanf("%d",&i);
j=JAN;
for(k=1;k<10;k++)
{
month[k]=j++;
}

for(k=1;k<=9;k++)
{
printf("%d\n",month[k]);
}//第一个问题:此处打印出来的是1 2 3 4 5 6 7 8 10 为什么没不是9而是10?
switch(month[i])
{
case JAN:printf("This is JAN Month.");break;
case FEB:printf("This is FEB Month.");break;
case MAR:printf("This is MAR Month.");break;
case APR:printf("This is APR Month.");break;
case AUG:printf("This is AUG Month.");break;
case SEP:printf("This is SEP Month.");break;
case OCT:printf("This is OCT Month.");break;
case NOV:printf("This is NOV Month.");break;
case DEC:printf("This is DEC Month.");break;
default:printf("Input error!");break;
}
}


第二个问题 我如果输入9、10、11或13它都是"input error!" 但是当我输入12的时候 它会出来"This is JAN Month."
这是为什么?


这段代码在VC6.0上以**.Cpp报错 在TC上运行出现上述问题 望高手解答。。。。。
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
我要学技术 2010-07-17
  • 打赏
  • 举报
回复
正解!!!!
[Quote=引用 2 楼 aizibion 的回复:]
问题1
数组越界,数组索引从0开始
应为
for(k=0;k<9;k++)
{
month[k]=j++;
}


如果读了month[9],那这个值可能是随机值,这里是10
问题2
同问题一类似,读到month[12]的时候恰好是1而已
[/Quote]
阿磊2013 2010-07-17
  • 打赏
  • 举报
回复
嗯,问题不大,仔细一点就好了
sparrow081 2010-07-17
  • 打赏
  • 举报
回复
第二个问题 是你中奖了
sparrow081 2010-07-17
  • 打赏
  • 举报
回复
第一个问题是因为你的数组越界了
你打印出了 moth[9], 而moth的合理范围是8, 因为你在声明的时候 j 是紧挨着数组的,所以编译器错误的在你访问moth[9]时,实际上是安排你去访问了j, 而此时的j 由于经过了上面的循环 ,它的值已经变成了 10, 所以你越界访问后 就会得到了10
aizibion 2010-07-17
  • 打赏
  • 举报
回复
问题1
数组越界,数组索引从0开始
应为
for(k=0;k<9;k++)
{
month[k]=j++;
}



如果读了month[9],那这个值可能是随机值,这里是10
问题2
同问题一类似,读到month[12]的时候恰好是1而已
jxhs_deng 2010-07-17
  • 打赏
  • 举报
回复
数组month[9],当k=9是,month[k]为溢出

69,382

社区成员

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

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