我哪里错了?我有这个代码:
CComboBox m_item;
if((m_item.GetCurSel()) == atoi("TC001"))
MessageBox(L"TC001");
if((m_item.GetCurSel()) == atoi("TC002"))
MessageBox(L"TC002");
如果我在
ComboxBox
中选择“TC001”,则会弹出“TC001”和“TC002”消息框。
如果我在 ComboxBox
中选择“TC002”,则不会显示any
MessageBox
。为什么?
atoi的文档:
解释 str 指向的字节字符串中的整数值。字符串丢弃所有空白字符,直到找到第一个非空白字符,然后采用尽可能多的字符来形成有效的整数表示形式,并将它们转换为整数值。有效的整数值由以下部分组成:
(可选)加号或减号
[...] 如果无法进行转换,则返回- 数字
0
。
"TC001"
和
"TC002"
无法转换为整数,因此对
atoi
的调用在两种情况下都会返回
0
。
CComboBox::GetCurSel返回
组合框列表框中当前所选项目的从零开始的索引[...]因此,如果显示字符串
"TC001"
的项目是第一项,则
GetCurSel
返回
0
,与
atoi
在非整数输入上返回的值相同。两次比较都返回
true
,因此两个消息框都会显示。解决方案有两个:
CStringW text;
m_item.GetLBText(m_item.GetCurSel(), text);
if (text == L"TC001")
MessageBox(L"TC001");
else if (text == L"TC002")
MessageBox(L"TC002");