虽然循环不断重复

时间:2011-09-22 17:18:40

标签: c++ while-loop switch-statement

我设置了一个while循环,我想选择r或h,我不想使用forloops但我想使用一个开关为什么当我输入r或h时它会不断重复一百万次cout为那个案例?我不能只说一次..

while (chooseMove == 'r' or 'h')
{
    switch (chooseMove) 
    {
    case 'r':
            cout << "you chose r";

        break;
    case 'h':
        cout << "you chose h";
        break;
    }




} 

我也试过了forloops并遇到了同样的问题我无法弄明白

5 个答案:

答案 0 :(得分:5)

你的意思是while (chooseMove == 'r' or chooseMove == 'h')。您目前所写的内容相当于((chooseMove == 'r') or ('h')),而'h'的评估结果为true


也许你也在寻求输入逻辑方面的帮助:

char c;
bool success = false;

while (std::in >> c)
{
  switch(c) {
    case 'r': /* ... */ success = true; break;
    case 'h': /* ... */ success = true; break;
  }

  if (success) break;
}

如果输入流已关闭,这也将终止,您可以使用success检查操作是否成功。

答案 1 :(得分:2)

因为这是你编程的目的。

如果您希望循环停止或暂停(并说等待输入),您应该将该代码添加到循环中。

while (chooseMove == 'r' or chooseMove == 'h')
{
    switch (chooseMove) 
    {
    case 'r':
            cout << "you chose r";

        break;
    case 'h':
        cout << "you chose h";
        break;
    }
    std::cin >> chooseMove;  //stop and wait for more input
}

答案 2 :(得分:0)

这是一个问题:

while (chooseMove == 'r' or 'h')

请改为尝试:

while ((chooseMove == 'r') || (chooseMove == 'h'))

当你写(这甚至是如何编译?or不是C ++):

chooseMove == 'r' or 'h'

它被解释为:

(chooseMove == 'r') or ('h')

语句'h'始终为true,因此while循环将永远运行。

答案 3 :(得分:0)

chooseMove == 'r' or 'h'是什么意思?根据C ++ 标准,这被分组为(chooseMove == 'r') or ('h');该 隐式转换'h'bool然后导致(chooseMove == 'r') or ('h' != 0)。第二个条件永远是真的。

答案 4 :(得分:0)

while (chooseMove == 'r' or 'h')

相当于:

while ( (chooseMove == 'r')  or true)
//same as while ( (chooseMove == 'r')  || true)

所以这是无限循环。请注意,or||是相同的。

你想要的是这个:

while ( (chooseMove == 'r')  or (chooseMove == 'h'))
//same as while ( (chooseMove == 'r')  || (chooseMove == 'h'))