如果语句没有正确读取char变量

时间:2017-02-28 06:04:00

标签: c++ if-statement nested

调用程序时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;

}

2 个答案:

答案 0 :(得分:2)

您需要在whileif条件中为每个字词表达相等/不等式:

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;
  }
}