我有一个代码片段(我们在银行系统上分配了一个学校项目,这是第一个LogIn Screen也请注意这个代码片段在main()函数内)这样的东西:
int choice;
do
{
clrscr(); // for clear screen
cout << "1. Help!" << endl;
cout << "2. About Us..." << endl;
cout << "3. Log In" << endl;
cout << "4. Sign Up" << endl;
cout << "Option: ";
cin >> choice;
}while((choice != 1) || (choice != 2) || (choice != 3) || (choice != 4));
但问题是无论我输入1还是2或3或4还是任何其他数字,循环都会继续重复,它只是忽略了选择的值...如果我没有错,那么循环应该退出一旦选择获得1或2或3或4的值,并且循环应该继续,如果它获得除1或2或3或4之外的任何值...当我编译程序时没有错误所以我是无法得到实际问题。
额外信息: -
操作系统:Windows 7 编译器: Visual C ++ Express Edition(也尝试过Borland Turbo C ++ 4.5和Dev C ++以及Code :: Blocks最新版本,但仍然是同样的问题)
答案 0 :(得分:6)
循环条件始终为真; choice
不能同时拥有所有这些值。
据推测,您打算使用&&
,以便在choice
具有任何这些值时循环终止。
答案 1 :(得分:3)
当choice
与1不同或不同于2,或3或4时重复。如果choice
的值正确,则由于其他3个条件而循环。
while((choice != 1) || (choice != 2) || (choice != 3) || (choice != 4));
你可能意味着&&
:
while(choice != 1 && choice != 2 && choice != 3 && choice != 4);
或:
while(choice < 1 || choice > 4);
基本上,您希望循环choice
的值不正确。在此上下文中,正确表示:choice == 1 || choice == 2 || choice == 3 || choice == 4
。
所以,第一个条件可能是:
while (!(choice == 1 || choice == 2 || choice == 3 || choice == 4));
如果你还记得!(a || b) == (!a && !b)
。你也可以写:
while (choice != 1 && choice != 2 && choice != 3 && choice != 4);
这也是有道理的:循环,而选择不同于1和2以及3和4。
您还可以决定正确表示:choice >= 1 && choice <= 4
。在这种情况下,您将拥有:
while (!(choice >= 1 && choice <= 4));
或使用相同的属性:
while (choice < 1 || choice > 4);
答案 2 :(得分:2)
如果选择不是1或者不是2,你已经告诉它继续前进。你可能不是1而不是2等等。
答案 3 :(得分:0)
如果有人输入类似“做第一号”的内容,你会遇到cin问题所以我建议你将代码更改为以下内容
# include <iostream>
#include <stdlib.h>
# include <string>
# include <sstream>
using namespace std;
int main ()
{
string choice="";
int num = 0;
while (true) {
system("cls"); // for clear screen
cout << "1. Help!" << endl;
cout << "2. About Us..." << endl;
cout << "3. Log In" << endl;
cout << "4. Sign Up" << endl;
cout << "Option: ";
getline(cin, choice);
stringstream Stream(choice);
if (Stream >> num)
break;
cout << "Invalid number, please try again" << endl;
}
}