什么是错误的我的代码...当循环没有关闭条件完成时

时间:2016-01-09 17:02:25

标签: c++ do-while libstdc++

我正在通过 Ivor Horton的Beginning Visual C ++ 2012 进行工作,我在第三章中练习二:决策和循环。这是我的代码:

#include <iostream>

using namespace std;

int main()
{
    char letter;
    int vowels = 0;

    do
    {
        cout << "Enter a letter, and enter q or Q to end" << endl;
        cin >> letter; // Enter a letter
        switch (letter)
        {
            case 'a' || 'A' || 'e' || 'E' || 'i' || 'I' || 'o' || 'O' || 'u' || 'U': // If letter is a vowel, add to vowels variable
                vowels++;
                break;
            default: // If letter is not a vowel, break loop
                break;
        }
    } while (letter != 'Q' || letter != 'q');

    cout << "You entered " << vowels << " vowels.";
    return 0;
}

此程序的目的是允许用户输入一个字母,直到他们输入q或Q,此时do ... while循环结束,程序向用户显示他们输入的元音数。

当我运行它时,程序在我输入Q或q时不会退出。为什么?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

letter != 'Q' || letter != 'q'

含义...

字母不是Q or不是q ...所以它总是如此......好像它是Q,它不会是q },如果是q,则不会是Q ...如果信件一次为Qq,那将只是错误。

只需使用:

letter != 'Q' && letter != 'q'

答案 1 :(得分:2)

De Morgan的法律。

Not (A or B)

De Morgan的法律规定,

Not A and Not B相当于Enter the 1st number:12 Enter the 2nd number:6 Result is 4

答案 2 :(得分:1)

letter != 'Q' || letter != 'q'

这总是如此。你的意思是&amp;&amp;。

case的NB:它不能正常工作,你可以写case 'a': case 'A' ... : =&GT;所有元音案例都会落到vowels++;

答案 3 :(得分:-1)

试试这个

#include <iostream>

using namespace std;

int main()
{
    char letter;
    int vowels = 0;
    int flag = 0;

    do
    {
        cout << "Enter a letter, and enter q or Q to end" << endl;
        cin >> letter; // Enter a letter
        switch (letter)
        {
            case 'a' || 'A' || 'e' || 'E' || 'i' || 'I' || 'o' || 'O' || 'u' || 'U': // If letter is a vowel, add to vowels variable
                vowels++;
                break;
            case 'q' || 'Q' :  flag = 1;    
            break;
            default: // If letter is not a vowel, break loop
                break;
        }
    } while (flag !== 1);

    cout << "You entered " << vowels << " vowels.";
    return 0;
}