调用程序时starLeftTriangle& starRightTriangle, if语句似乎忽略了变量 choice ,程序连续运行,好像选择是'l'或'L'。
知道if语句被忽略的原因吗?我省略了程序的实际代码。
#include <iostream>
using namespace std;
void starLeftTriangle(int n);
void starRightTriangle(int n);
int main() {
int star;
char choice;
cout << "Input the number of stars you want to draw: \n";
cin >> star;
cout << "Would you like to draw a left triangle, right triangle, or quit? \n";
cin >> choice;
cout << "The choice value is " << choice << endl;
system("pause");
while (choice != 'q' || 'Q'){
if (choice == 'l' || 'L'){
starLeftTriangle(star);
}
else if (choice == 'r' || 'R') {
starRightTriangle(star);
}
}
if (choice == 'q' || 'Q') {
cout << "Quitting Program.";
}
else{
//throw error
}
return 0;
}
答案 0 :(得分:2)
您需要在while
和if
条件中为每个字词表达相等/不等式:
while (choice != 'q' && choice != 'Q') {
if (choice == 'l' || choice == 'L') {
starLeftTriangle(star);
}
else if (choice == 'r' || choice == 'R') {
starRightTriangle(star);
}
}
if (choice == 'q' || choice == 'Q') {
cout << "Quitting Program.";
}
else {
// throw error
}
我认为目前正在发生的情况是,对于choice
的某些值,以下if
条件总是如此:
if (choice == 'l' || 'L') {
starLeftTriangle(star);
}
原因是如果choice
实际上是'l'
那么这将是真的,但如果没有,那么你的另一个条件是'L'
,它也会评估为真。为避免这种情况,请在任何地方使用平等。
答案 1 :(得分:1)
您的条件被解释如下:choice == 'q'
或'Q'
- Q的整数代码大于0,因此对于任何角色,它总是会返回true
试试这个:
bool loop = true;
while (loop) {
switch ((int) choice) {
case (int) 'l':
case (int) 'L':
starLeftTriangle(star);
break;
case (int) 'r':
case (int) 'R':
starRightTriangle(star);
break;
case (int) 'q':
case (int) 'Q':
loop=false;
break;
}
}