询问姓名,如果错误再问,如果正确,继续(不工作)C ++

时间:2016-02-18 16:03:54

标签: c++ string if-statement do-while password-checker

这是我的代码。我在这里尝试做的是一个代码,如果名称错误,请求一个名称(如传递),然后程序说出这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),我得到了正确名称的按摩

  

“欢迎朋友=]”。

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

5 个答案:

答案 0 :(得分: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");

答案 1 :(得分: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;
}

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

答案 2 :(得分:0)

  在你的代码中: 你的情况是一时的(姓名!=&#34; ighor&#34; ||姓名!=&#34; indio&#34;);这意味着如果这两个条件中的任何一个为真,那么Loop将继续它的工作。如果你的输入是&#34; indio&#34;然后第一个条件成为现实。   在我的代码中: while(Name!=&#34; ighor&#34;&amp;&amp; Name!=&#34; indio&#34;);这意味着如果其中一个变为false,则这两个条件必须为true,然后循环将停止它& #39;工作。现在,如果您的输入是&#34; indio&#34;这种情况变得虚假,你的循环就会停止。 要了解有关continue和break语句的更多信息,请阅读此内容。   试试这个: int main(void)     {     setlocale(LC_ALL,&#34;葡萄牙语&#34;);     string Name =&#34;&#34 ;;     cout&lt;&lt; &#34;你的名字是什么?&#34; &LT;&LT; ENDL;     cin&gt;&gt;名称;     if(Name ==&#34; ighor&#34; ||         姓名==&#34; indio&#34;)         {         cout&lt;&lt; &#34;欢迎朋友= D&#34; &LT;&LT; ENDL;         系统(&#34;暂停&#34);         系统(&#34; CLS&#34);         }         其他         {             做             {                 cout&lt;&lt; &#34;抱歉,错误的名字= [&#34; &LT;&LT; ENDL;                 系统(&#34;暂停&#34);                 系统(&#34; CLS&#34);                 cout&lt;&lt; &#34;我会给你另一次机会=]&#34; &LT;&LT; ENDL;                 //系统(&#34;暂停&#34);                 系统(&#34; CLS&#34);                 cout&lt;&lt; &#34;再次写下你的名字&#34; &LT;&LT; ENDL;                 cin&gt;&gt;名称;                 if(Name ==&#34; ighor&#34; ||                     姓名==&#34; indio&#34;)                 {                     继续;                 }             }(姓名!=&#34; ighor&#34;&amp;&amp;                        姓名!=&#34; indio&#34;);         }     cout&lt;&lt; &#34;怎么了&#34; &LT;&LT;名称&lt;&lt; ENDL;     系统(&#34;暂停&#34);     系统(&#34; CLS&#34);             返回0;     }

答案 3 :(得分:0)

感谢我所做的所有答案

continue;

`break;`

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

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

我想要的是“检查”答案并制作一些东西,如果我是“Sim”或“Vou”(意思是“是”和“我愿意”,但无论如何) 我想我可以使用你们告诉我的关于“&amp;&amp;&amp;”的“II”替换的内容。所以它使条件正确。 如果有方法或命令,那么它不会仅仅为了这个答案来区分Capital和小写,所以我不需要将这两个人用来写的方式也有所帮助。 这只是一个学习代码,仅用于研究提议

这是我第一次发布并且真的很惊讶,那些答案太多了,谢谢大家的支持。 你们统治。 好的编码。

答案 4 :(得分:-1)

请正确缩进代码。 尝试替换

continue;

通过

break;

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