你好我在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时,它被禁止退出。
答案 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());
}
你的条件永远是真的