2011-09-22 114 views
0

我建立一个while循环,我想选择R或H,我不想使用forloops,但我想它为什么当我输入r或h它不断重复无数次的使用开关对于这种情况?我不能让它只说一次..While循环不断重复

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

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




} 

我也forloops尝试过了,有同样的问题,我不能弄明白

+0

你可能想在里面添加一个'<< endl'! – mkb

回答

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来检查操作是否成功。

+4

是'or'真的是一个C++运算符吗? – BlackBear

+1

@BlackBear:是的,它是'||'的替代方法。例如[see here](http://www.cplusplus.com/reference/clibrary/ciso646/) (头文件本身并不需要)另一种流行的替代方法是'!!??!' –

+0

cool!我总是发现||烦人;)谢谢 – BlackBear

0

这是一个问题:

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

试试这个:

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

当你写(这是怎么连编译or不是C++?):

chooseMove == 'r' or 'h' 

它被解释为:

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

声明'h'始终是真实的,所以while循环将永远运行下去。

+0

'或'实际上是_is_ C++。 §2.13 –

+0

WHAAAT?时间让麻省代码可读! – Blender

+0

IMO:我使用'||',因为每个编码器都知道它,并且熟悉它,而大多数人的事情'或'是一个错误:( –

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 
} 
+0

圣杯我甚至没有意识到这一点,我看到因为它现在要求值再次它需要知道去哪里... – mystycs

+0

你和克雷克都有一半的答案。 – mkb

+0

哦,我专注于“不停止”的问题,他在“总是”部分。我的 –

0

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

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'))