while循环字符C ++

时间:2014-08-02 00:51:36

标签: c++ while-loop char

我正在编写一个编程任务,我无法弄清楚为什么这个while循环无限循环。在此循环发生之前还有其他输入,但我有cin.ignore()在此循环之前清除任何垃圾。我在挠脑,帮忙吗?

//Prompt for readiness
    char ready = 'x';
    while (ready != 'Y' || ready != 'y') {
        cout << "READY TO START YOUR TURN " << playerName << "? ";
        ready = cin.get();
    }

3 个答案:

答案 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();
    }

它将解决您的问题。