C ++陷入了while循环

时间:2016-09-12 19:45:23

标签: c++

你好我在C ++中做了一个非常简单的while循环,我无法弄清楚为什么即使给出了正确的输入,我仍然陷入其中。

string itemType = "";
        while(!(itemType == "b") || !(itemType == "m") || !(itemType == "d") || !(itemType == "t") || !(itemType == "c")){
            cout<<"Enter the item type-b,m,d,t,c:"<<endl;
            cin>>itemType;
            cout<<itemType<<endl;
        }
        cout<<itemType;

如果有人可以指出我在看什么,我会非常感激。当输入b,m,d,t或c时,它被禁止退出。

4 个答案:

答案 0 :(得分:1)

你的问题在于你的逻辑。如果您查看while循环的条件,如果项类型不是&#34; b&#34;则循环将重复。是不是&#34; m&#34;是不是&#34; d&#34;这意味着如果你的项目类型是&#34; b&#34;,它显然不是&#34; m&#34;,所以它会重复。你想使用&amp;&amp;而不是||。

答案 1 :(得分:1)

正如其他答案和评论所写的那样,你的逻辑是错误的。使用find()可以简化您的任务:

std::string validCharacters( "bmdtc" );
while ( std::string::npos == validCharacters.find( itemType  ) )
{
    ...
}

此解决方案更通用,更易于阅读。另见std::string::find

的文档

答案 2 :(得分:0)

退出循环的布尔表达式存在缺陷。就这样,为了退出循环,itemType必须同时是所有那些字母。首先尝试||字母,然后否定它:

while(!(itemType == "b" || itemType == "m" || itemType == "d" || itemType == "t" || itemType == "c")

答案 3 :(得分:0)

试试这个

string itemType =&#34;&#34;;

        CostCenterHeaders CostHeaders = CostCenterHeaders.GetCostCenterHeaders(ClientNumber);
        List<SelectListItem> Level1Header = new List<SelectListItem>();
        if (CostHeaders.Level1Heading !=null)
        {
            Level1Header.Add(new SelectListItem { Text = "All " + CostHeaders.Level1Heading + " Centers", Value = "" });
            List<HierarchyLevel> HierarchyLevels = HierarchyLevel.GetHierarchyByLevel(ClientNumber);
            Level1Header.AddRange(HierarchyLevels.Select(x => new SelectListItem() { Value = x.LevelID, Text = x.LevelDescr }).ToList());
        }

你的条件永远是真的