Chinaunix首页 | 论坛 | 博客
  • 博客访问: 542691
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 19:13:12

1 现象:问题描述
在XXX版本中处理话单时出现一种类型话单处理结果错误,处理的结果与另外一个类型的话单结果十分相似。由于此话单出现的情况很少,所以以前从未出现过此问题。
2 关键过程:根本原因分析
分析代码,程序在判断话单子类型时有下面语句:
    switch(m_Type)
    {
        case TYPE_USER_ON:
                           m_FieldIndex = E_TYPE_USER_ON;
                           break;
        case TYPE_USER_STOP:
                           m_FieldIndex = E_TYPE_USER_STOP;
        case TYPE_USER_OFF:
                           m_FieldIndex = E_TYPE_USER_OFF;
                           break;
         ……
     }
在第二个case没有break,导致出现TYPE_USER_STOP类型时,实际是按TYPE_USER_OFF进行了处理,导致结果错误。
3 结论:解决方案及效果
解决方法很简单,增加一个break,逻辑恢复正确。
4 经验总结:预防措施和规范建议
使用switch … case 时对于每一个case都需要仔细辨别,不可遗漏必要的break。如果逻辑上不需要break 语句需要特别注明。
5 备注
6 考核点
switch语句中break的应用。
7 试题
1、 执行如下switch语句后, 打印语句显示变量iType的值为:(A)
   注意:以下程序片断为描述方便,不一定符合编程规范。
   int iType = 1;
   switch ( iType)
   {
       case 0 :
            iType ++ ;
       case 1 :
            iType += 2;
       case 2:
            iType = 0 ;
            break;
       default:
            iType = 1;
   }
   printf("iType = %d \n", iType);
A)  0     B) 1    C)2    D)3
阅读(292) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~