do-while循环不断重复

时间:2013-11-17 17:28:16

标签: c++

我有一个代码片段(我们在银行系统上分配了一个学校项目,这是第一个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最新版本,但仍然是同样的问题)

4 个答案:

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

}