而循环字符为C++

while loop chars C++

本文关键字:C++ 字符 循环      更新时间:2023-10-16

我正在处理一个编程赋值,我不明白为什么while循环是无限循环的。在这个循环发生之前还有其他输入,但我有cin.ignore((来清除这个循环之前的任何垃圾。我在挠头,救命?

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

您需要将||(OR(更改为&&(AND(。此外,在用cin.get()读取后重置流,即将以下行放在之后

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
std::cin.clear();

(您需要#include <limits>(

否则,cin.get()返回一个char,并在流中留下一个额外的n(换行符(,它会被再次读取,并且基本上会为每个非yes响应执行两次循环。

想想布尔代数。如果一侧或两侧为真,则OR门结果为真。因此,如果您输入'y''Y',您的语句将返回true,因为其中一方仍然为true

如果将||更改为&&(AND门(,并且只有当两边都为true时才返回true,那么您的语句是有意义的。用户输入'y''Y'(他已经准备好了,所以让他离开那个循环!(,其中一条边等于false,因此循环终止

while (ready != 'Y' && ready != 'y') {

while (ready == 'Y' || ready == 'y') {

是你的意思。

将代码更改为this-

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

它将解决您的问题。