c++陷入while循环

C++ stuck in while loop

本文关键字:循环 while 陷入 c++      更新时间:2023-10-16

你好,我在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时,它应该退出

你的问题在于你的逻辑。如果你查看while循环的条件,如果项目类型不是"b"或"m"或"d"等,循环将重复。这意味着如果你的项目类型是"b",它显然不是"m",所以它会重复。你需要使用&&而不是||.

其他答案和评论写得正确,你的逻辑是错误的。使用find()将简化您的任务:

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

这个解决方案更通用,更易于阅读。参见std::string::find

的文档

退出循环的布尔表达式有缺陷。它的方式是,为了退出循环,itemType必须同时是所有这些字母。尝试先将字母替换为||,然后将其否定:

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

try this

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;

你的条件总是为真