当条件返回false时,do / while循环不会退出

时间:2017-02-21 02:28:06

标签: c++

我需要它是一个do / while循环但我看到的所有答案 是循环。为什么我不能在我的条件下退出呢?

#include <iostream>
using namespace std;

int main()
{
    char c('a');

    do
    {
        cout << "Enter a character to be displayed\n";
        cin >> c;
        cout << c << endl;
    } 
    while ((c != 'e' || c != 'E'));

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您的延续条件应该是c 不是'e'而且'E'

while ((c != 'e' && c != 'E'))
//               ^^

答案 1 :(得分:0)

这是一个小的逻辑错误,导致无限循环,因为您使用||,这是逻辑OR,而不是逻辑AND(&&)符号。如果你分析你的while循环:

while ((c != 'e' || c != 'E'));

然后只要c不是 e AND E ,那么循环将继续运行,因为为了伪造条件,c应该等于e <强>和 E同时。这是永远不可能的,因此,你的循环无限运行。

请参阅此处的逻辑:

  • 如果您输入'e':

    • while ((c != 'e' || c != 'E'));中,只有第一个条件是伪造的;因此,0 || 1 = 1 =真。
    • 这意味着结束条件为真,因此while循环继续。
  • 如果您输入'E':

    • while ((c != 'e' || c != 'E'));中,只有第二个条件是伪造的;因此,1 || 0 = 1 =真。
    • 这意味着结束条件为真,因此while循环继续。
  • 如果您输入任何其他字母:

    • while ((c != 'e' || c != 'E'));中,没有任何条件被伪造;因此,1 || 1 = 1 =真。
    • 这意味着结束条件为真,因此while循环继续。

要修复代码,请将while循环条件更改为:

  while ((c != 'e' && c != 'E')); // notice the change in the logical operator.

这样,如果我们使用与上面相同的逻辑(我不会重复它,但它应该是直截了当的),那么即使其中一个条件为假,循环也会终止。这意味着输入“e”或“E”将结束循环,这是期望的效果。

希望这会有所帮助。如果您需要更多说明或帮助,请在下面的评论框中告知我。祝你好运!