无论我输入什么,此函数中唯一识别的int是1。 如果选择了其他任何内容,则重复执行do-while循环。 代码也没有任何OR运算符,例如, “while(输入!= 0)”
void menu()
{
int input = -1;
do
{
cout << " ---------------" << endl << " - OU6 -" << endl << " ---------------" << endl;
cout << "1. Read a transaction from the keyboard." << endl;
cout << "2. Print all transactions to console." << endl;
cout << "3. Calculate the total cost." << endl;
cout << "4. Get debt of a single person." << endl;
cout << "5. Get unreliable gold of a single person." << endl;
cout << "6. List all persons and fix." << endl;
cout << "0. Save and quit application." << endl;
cin >> input;
} while (input != (0 || 1 || 2 || 3 || 4 || 5 || 6));
if (input == 0)
{
cout << "0!" << endl;
cin.get();
}
if (input == 1)
{
cout << "1!" << endl;
cin.get();
}
if (input == 2)
{
cout << "2!" << endl;
cin.get();
}
}
答案 0 :(得分:11)
这一行:
while (input != (0 || 1 || 2 || 3 || 4 || 5 || 6))
不符合您的想法。你不能把这样的测试结合起来。您所写的内容基本上等同于while (input != true)
,并且由于true
等于1,您可以看到唯一可行的选项是input == 1
。
您需要将其更改为例如。
while (input < 0 || input > 6)
答案 1 :(得分:3)
您正在将input
与0 || 1 || 2 || 3 || 4 || 5 || 6
进行比较。
||
的结果是布尔值,是真值。
0 || 1 || 2 || 3 || 4 || 5 || 6
相当于
0 != 0 || 1 != 0 || 2 != 0 || 3 != 0 || 4 != 0 || 5 != 0 || 6 != 0
(希望显然)是真的。
bool
可以隐式转换为int
,true
转换为1
,这就是您唯一有效输入的原因;您的条件相当于input != 1
。
翻译成逻辑的英文短语“如果输入不是0或1”是“如果输入不是0 且输入不是1”。
这会给你
while (input != 0 && input != 1 && input != 2 && input != 3 && input != 4 && input != 5 && input != 6)
这是一个严重的混乱,写起来更明智的是
while (input < 0 || input > 6)
或更环绕,
while (!(input >= 0 && input <= 6))
答案 2 :(得分:0)
正如其他人所指出的,使用|| (逻辑或)将使您的条件等同于(input != 1)
。
我建议在这里使用switch / case语句以及其他条件:
void menu()
{
int input = -1;
bool inputIsValid = false ;
do
{
cout << " ---------------" << endl << " - OU6 -" << endl << " ---------------" << endl;
cout << "1. Read a transaction from the keyboard." << endl;
cout << "2. Print all transactions to console." << endl;
cout << "3. Calculate the total cost." << endl;
cout << "4. Get debt of a single person." << endl;
cout << "5. Get unreliable gold of a single person." << endl;
cout << "6. List all persons and fix." << endl;
cout << "0. Save and quit application." << endl;
cin >> input;
switch ( input )
{
case 0:
cout << "0!" << endl;
cin.get();
inputIsValid = true;
break;
/* other cases here... */
default:
inputIsValid = false ;
break;
}
} while ( false == inputIsValid ) ;
}