我正在编写一个编程任务,我无法弄清楚为什么这个while循环无限循环。在此循环发生之前还有其他输入,但我有cin.ignore()在此循环之前清除任何垃圾。我在挠脑,帮忙吗?
//Prompt for readiness
char ready = 'x';
while (ready != 'Y' || ready != 'y') {
cout << "READY TO START YOUR TURN " << playerName << "? ";
ready = cin.get();
}
答案 0 :(得分:6)
您需要将||
(或)更改为&&
(AND)。此外,在您使用cin.get()
阅读后重置流,即将以下行放在:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
(您需要#include <limits>
)
否则,cin.get()
返回char
并在流中留下额外的\n
(换行符),再次读取并且您基本上最终会为每个循环执行两次非肯定的回应。
答案 1 :(得分:2)
想到布尔代数。如果一方或双方都为真,或门结果为真。所以,如果你输入'y'
或'Y'
,你的陈述将导致返回true,因为双方仍然是真的。
如果你将||
更改为&&
(AND门),只有当两个边都为真时返回true,那么你的陈述才有意义。用户输入'y'
或'Y'
(他已经准备好了,所以让他离开那个循环!)并且其中一个边等于false,因此循环终止。
while (ready != 'Y' && ready != 'y') {
或
while (ready == 'Y' || ready == 'y') {
是你的意思。
答案 2 :(得分:0)
将代码更改为 -
char ready = 'x';
while (ready != 'Y' && ready != 'y') {
cout << "READY TO START YOUR TURN " << playerName << "? ";
ready = cin.get();
}
它将解决您的问题。