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
阅读(328) | 评论(0) | 转发(0) |