0

那是我的代码。我在这里尝试做的是一个代码,如果名称错误,它会询问名称(如通行证),然后程序会说出这 3 条错误消息并再次询问名称,直到 2 个列入白名单的名称之一给出,然后继续使用代码。

int main(void)
{
setlocale(LC_ALL, "Portuguese");
string Name = "";
cout << "Whats your name dude ?" << endl;
cin >> Name;

if (Name == "ighor" ||
    Name == "indio")
    {
    cout << "Welcome friend =D" << endl;
    system("pause");
    system("cls");
    }
    else
    {
        do  
        {
            cout << "Sorry, wrong name =[" << endl;
            system("pause");
            system("cls");
            cout << "I'll give you another chance =]" << endl;
            system("pause");
            system("cls");
            cout << "Write your name again" << endl;
            cin >> Name;

            if (Name == "ighor" ||
                Name == "indio")
            {
                continue;
            }

        }   while (Name != "ighor" ||
                   Name != "indio");


    }

cout << "Whats up" << Name << endl;
system("pause");
system("cls");      
        return 0;

}

我对这段代码的测试给了我这个:
如果我把一个列入白名单的名字(indio 或 ighor)我得到正确名字的按摩

“欢迎朋友 =]”。

如果我输入了一个错误的名字,我得到了错误名字的按摩,很好,然后我被要求再次输入这个名字,我输入了一个列入白名单的名字,它一直说它是错误的名字,错误的名字也是显示错误的名称消息。

4

5 回答 5

0

感谢我所做的所有答案都改变了

continue;

为了

`break;`

它工作得很好=)但是由于代码太混乱了,我可能会研究一下你们给我的其他提示,这样我就可以让它更干净=D我对这段代码还有另一个疑问

cin >> RPI;
if (RPI == "Sim"||RPI == "sim"||RPI == "vou"||RPI == "Vou")

我在这里想要的是“检查”答案,如果我是“Sim”或“Vou”(意思是“是”和“我会”,但无论如何)我认为我可以使用你们告诉我的东西关于“&&”的“II”替换,因此它使条件正确。如果有办法或命令,那么它不会仅仅为了这个答案区分大写和小写,所以我不需要把这个人可以写的两种方式都写出来也会有帮助。那只是一个学习代码,仅供学习建议

这是我第一次发帖,真的很惊讶,这么多答案,太快了,谢谢大家的支持。你们统治。很好的编码。

于 2016-02-18T17:24:23.840 回答
0

循环中的逻辑do-while是有缺陷的。代替

            continue;

你需要

            break;

continue;继续循环的下一次迭代。break;打破循环。

此外,while语句逻辑不正确。你需要使用:

while (Name != "ighor" &&  Name != "indio");
                      ^^^ not ||

话虽如此,您只需要其中一项检查,而不是两者。

您可以使用:

do  
{
   ...

   if (Name == "ighor" || Name == "indio")
   {
      break;
   }

} while (true);

或者

do  
{
   ...

}  while (Name != "ighor" && Name != "indio");
于 2016-02-18T16:12:43.547 回答
0

尝试这个:

int main() {

  string name;
  cout << "Whats your name dude ?" << endl;
  cin >> name;

  while (!(name == "ighor" || name == "indio")) {
    cout << "Sorry, wrong name =[" << endl;
    system("pause");
    system("cls");
    cout << "I'll give you another chance =]" << endl;
    system("pause");
    system("cls");
    cout << "Write your name again" << endl;
    cin >> name;
  }

  cout << "Whats up " << name << endl;
  system("pause");
  system("cls");      
  return 0;
}

它更短,更干净,更具表现力,而且它也有效..

于 2016-02-18T16:14:15.607 回答
0

在您的代码中:

您的条件是while (Name != "ighor" || Name != "indio");这意味着如果这两个条件中的任何一个是,true那么循环将继续它的工作。如果您的输入是,"indio" 那么第一个条件变成了true

在我的代码中:

while (Name != "ighor" && Name != "indio");这意味着这两个条件必须是true如果其中一个成为,false那么循环将停止它的工作。现在,如果您的输入是"indio"这种情况false,您的循环将停止。

要了解更多信息continuebreak声明,请阅读thisthis

尝试这个:

int main(void)
    {
    setlocale(LC_ALL, "Portuguese");
    string Name = "";
    cout << "Whats your name dude ?" << endl;
    cin >> Name;

    if (Name == "ighor" ||
        Name == "indio")
        {
        cout << "Welcome friend =D" << endl;
        system("pause");
        system("cls");
        }
        else
        {
            do
            {
                cout << "Sorry, wrong name =[" << endl;
                system("pause");
                system("cls");
                cout << "I'll give you another chance =]" << endl;
                //system("pause");
                system("cls");
                cout << "Write your name again" << endl;
                cin >> Name;

                if (Name == "ighor" ||
                    Name == "indio")
                {
                    continue;
                }

            }   while (Name != "ighor" &&
                       Name != "indio");


        }

    cout << "Whats up" << Name << endl;
    system("pause");
    system("cls");
            return 0;
    }
于 2016-02-18T16:18:57.953 回答
-1

请正确缩进您的代码。尝试更换

continue;

经过

break;

continue 语句再次遍历循环,您要做的是退出它。让我知道它是否有效,因为我现在无法测试。

于 2016-02-18T16:11:56.867 回答