免费注册 查看新帖 |

Chinaunix

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

求解一段枚举程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-19 09:00 |只看该作者 |倒序浏览
----------------------------------------------------------------
#include<stdio.h>
int main(void)
{
        int x;
        enum days{sun,mon,tue,wed} day;
        while(1)
        {
                printf("adminstrator $:");
                scanf("%d",&x);
                day = (enum days)x;
                switch(day)
                {
                        case sun:printf("sunday\n");break;
                        case mon:printf("monday\n");break;
                        case tue:printf("tuesday\n");break;
                        case wed:printf("wednesday\n");break;
                        default:printf("error\n");break;
                }
        }
        return 0;
}
-----------------------------------------------
1.程序的功能是你输入0~3,显示星期日到星期三
2.程序编译正常,运行的时候输入的是数字也运行正常
3.但是输入字母的时候就不正常了
4.分析:假若我输入sudo,因为scanf里面是%d,那么我得到的x的值为2282321(编译器不同得到的值可能是不同的),本应该输出error,但是却陷入死循环了
5.有没有高手能够解答下?

论坛徽章:
0
2 [报告]
发表于 2011-02-19 09:05 |只看该作者
switch之前检查day的值的范围

论坛徽章:
0
3 [报告]
发表于 2011-02-19 13:39 |只看该作者
回复 2# drswinghead


    为什么要检查? 在switch里不是可以任意值的么

论坛徽章:
0
4 [报告]
发表于 2011-02-19 14:11 |只看该作者
  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         int x, c;
  5.         enum days{ sun, mon, tue, wed };

  6.         while(1) {
  7.                 printf("adminstrator $:");
  8.                 if (scanf("%d",&x) != 1) {
  9.                         /* 清stdin缓冲区 */
  10.                         while ((c = getchar()) != '\n' && c != EOF)
  11.                                 ;
  12.                         /* 置x为一个错误值 */
  13.                         x = -1;
  14.                 }

  15.                 switch(x) {
  16.                 case sun:
  17.                         printf("sunday\n");
  18.                         break;
  19.                 case mon:
  20.                         printf("monday\n");
  21.                         break;
  22.                 case tue:
  23.                         printf("tuesday\n");
  24.                         break;
  25.                 case wed:
  26.                         printf("wednesday\n");
  27.                         break;
  28.                 default:
  29.                         printf("error\n");
  30.                         break;
  31.                 }
  32.         }
  33.         return 0;
  34. }
复制代码
http://hi.baidu.com/wangjianzhong1981/blog/item/f2e880df94984a166227985b.html

论坛徽章:
0
5 [报告]
发表于 2011-02-19 14:41 |只看该作者
scanf 取值 一般不要取%d 容易出问题 可以取%s 后再转换成 数值....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP