我的代码有什么问题...当条件满足时循环不关闭
What is Wrong With My Code That do...while Loop is Not Closing When Condition is Fulfilled
我正在学习 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的时候程序没有退出。为什么?我该如何解决这个问题?
letter != 'Q' || letter != 'q'
永远如此。你是说&&.
注意 case
:它不能按原样工作,你可以写 case 'a': case 'A' ... :
=> 所有元音大小写都属于 vowels++;
letter != 'Q' || letter != 'q'
意味着...
字母不是Q
or
不是q
...所以它总是正确的...好像是Q
,它不会是q
,如果它是 q
,则它不会是 Q
... 如果字母同时是 Q
和 q
,那只会是错误的。
只需使用:
letter != 'Q' && letter != 'q'
德摩根定律。
!( letter == 'Q' || letter == 'q' ) <=> ( letter != 'Q' && letter != 'q' )
德摩根定律指出,
Not (A or B)
等同于 Not A and Not B
.
试试这个
#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;
}
我正在学习 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的时候程序没有退出。为什么?我该如何解决这个问题?
letter != 'Q' || letter != 'q'
永远如此。你是说&&.
注意 case
:它不能按原样工作,你可以写 case 'a': case 'A' ... :
=> 所有元音大小写都属于 vowels++;
letter != 'Q' || letter != 'q'
意味着...
字母不是Q
or
不是q
...所以它总是正确的...好像是Q
,它不会是q
,如果它是 q
,则它不会是 Q
... 如果字母同时是 Q
和 q
,那只会是错误的。
只需使用:
letter != 'Q' && letter != 'q'
德摩根定律。
!( letter == 'Q' || letter == 'q' ) <=> ( letter != 'Q' && letter != 'q' )
德摩根定律指出,
Not (A or B)
等同于 Not A and Not B
.
试试这个
#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;
}