C++ 如何在不使用循环的情况下返回到代码的顶部?

C++ 如何在不使用循环的情况下返回到代码的顶部?,c++,C++,我正在尝试制作一个“Flames”程序,我的问题是在用户输入他/她的名字和合作伙伴的名字并得到结果后,我想问用户是否希望输入另一个名字而不使用循环 我尝试过使用goto,但是当用户无法输入初始名称时会出现错误 #include <iostream> #include <string> using namespace std; int main() { start: system("cls"); char t; string fname1,f

我正在尝试制作一个“Flames”程序,我的问题是在用户输入他/她的名字和合作伙伴的名字并得到结果后,我想问用户是否希望输入另一个名字而不使用循环

我尝试过使用goto,但是当用户无法输入初始名称时会出现错误

#include <iostream>
#include <string>

  using namespace std;

  int main()
  {
  start:
  system("cls");
  char t;
  string fname1,fname2;
  int i,x,z,y,name1len=0,name2len=0,b,total,name1spc=0,name2spc=0;

  cout<<"Enter your full name: ";
  getline(cin,fname1);
  cout<<"Enter partners name: ";
  getline(cin,fname2);
  cout<<endl;

    for(i=0;i<=fname1.length();i++ )
        {

        fname1[i]=toupper(fname1[i]);

        }    
    for(i=0;i<=fname2.length();i++)    
        {

        fname2[i]=toupper(fname2[i]);
        }


 x=fname1.length();
 y=fname2.length();



//============check for spaces=========


        for(i=0;i<x;i++)
        {
            if(fname1[i]==' ')
                {
                name1spc++;
                }

        }
        for(i=0;i<y;i++)
        {
            if(fname2[i]==' ')
                {
                name2spc++;
                }

        }

//=========for 1st name compare=========
  for(i=0;i<fname1.length();i++)
    {
        for(b=0;b<fname2.length();b++)
            {
            //cout<<fname1[i]<<endl;
                if(fname1[i]==fname2[b])
                    {
                    name1len++;
                    break;

                    }

            }

    }
 //============2nd name compare================
 for(i=0;i<fname2.length();i++)
    {
        for(b=0;b<fname1.length();b++)
            {
            //cout<<fname1[i]<<endl;
                if(fname2[i]==fname1[b])
                    {
                    name2len++;
                    break;

                    }

            }

    }





  name1len=name1len-name1spc;
  name2len=name2len-name2spc;
  cout<<name1len<<endl<<name2len;


  total=name1len+name2len;

  if(total>6)
  {
  total=total%6;
  }

  switch(total)
  {

 case 1:
 cout<<fname1<<" and "<<fname2<<" are Friends"<<endl;
 break;
 case 2:
 cout<<fname1<<" and "<<fname2<<" are Lovers"<<endl;
 break;
 case 3:
 cout<<fname1<<" and "<<fname2<<" are Aquaintance"<<endl;
 break;
 case 4:
 cout<<fname1<<" and "<<fname2<<" are Married"<<endl;
 break;
 case 5:
 cout<<fname1<<" and "<<fname2<<" are Enemies"<<endl;
 break;
 case 6:
 cout<<fname1<<" and "<<fname2<<" are Sweethearts"<<endl;
 break;
 default:
 cout<<"No name entered"<<endl;
 } 

  cout<<"Would you like to enter another name? Y/N?";
  cin>>t;

     if(t=='Y' || t=='y')
       {
        goto start;
        }
     else if(t=='N' || t=='n')
       {
        cout<<"THANKS"<<endl;
        system("pause");
       }
      else{
       return 0;
          }









   }//ending for int main
#包括
#包括
使用名称空间std;
int main()
{
开始:
系统(“cls”);
查尔特;
字符串fname1,fname2;
整数i,x,z,y,name1len=0,name2len=0,b,总计,name1spc=0,name2spc=0;

cout您可以使用while循环,如下所示:

  using namespace std;

  int main()
  {
  while(true){
  system("cls");
  char t;
  string fname1,fname2;
  int i,x,z,y,name1len=0,name2len=0,b,total,name1spc=0,name2spc=0;

  cout<<"Enter your full name: ";
  cin.ignore();
  getline(cin,fname1);
  cout<<"Enter partners name: ";
  getline(cin,fname2);
  cout<<endl;

    for(i=0;i<=fname1.length();i++ )
        {

        fname1[i]=toupper(fname1[i]);

        }    
    for(i=0;i<=fname2.length();i++)    
        {

        fname2[i]=toupper(fname2[i]);
        }


 x=fname1.length();
 y=fname2.length();



//============check for spaces=========


        for(i=0;i<x;i++)
        {
            if(fname1[i]==' ')
                {
                name1spc++;
                }

        }
        for(i=0;i<y;i++)
        {
            if(fname2[i]==' ')
                {
                name2spc++;
                }

        }

//=========for 1st name compare=========
  for(i=0;i<fname1.length();i++)
    {
        for(b=0;b<fname2.length();b++)
            {
            //cout<<fname1[i]<<endl;
                if(fname1[i]==fname2[b])
                    {
                    name1len++;
                    break;

                    }

            }

    }
 //============2nd name compare================
 for(i=0;i<fname2.length();i++)
    {
        for(b=0;b<fname1.length();b++)
            {
            //cout<<fname1[i]<<endl;
                if(fname2[i]==fname1[b])
                    {
                    name2len++;
                    break;

                    }

            }

    }





  name1len=name1len-name1spc;
  name2len=name2len-name2spc;
  cout<<name1len<<endl<<name2len;


  total=name1len+name2len;

  if(total>6)
  {
  total=total%6;
  }

  switch(total)
  {

 case 1:
 cout<<fname1<<" and "<<fname2<<" are Friends"<<endl;
 break;
 case 2:
 cout<<fname1<<" and "<<fname2<<" are Lovers"<<endl;
 break;
 case 3:
 cout<<fname1<<" and "<<fname2<<" are Aquaintance"<<endl;
 break;
 case 4:
 cout<<fname1<<" and "<<fname2<<" are Married"<<endl;
 break;
 case 5:
 cout<<fname1<<" and "<<fname2<<" are Enemies"<<endl;
 break;
 case 6:
 cout<<fname1<<" and "<<fname2<<" are Sweethearts"<<endl;
 break;
 default:
 cout<<"No name entered"<<endl;
 } 

  cout<<"Would you like to enter another name? Y/N?";
  cin>>t;

     if(t=='Y' || t=='y')
       {
        continue;
        }
     else if(t=='N' || t=='n')
       {
        cout<<"THANKS"<<endl;
        break;
       }
      else{
       return 0;
          }
   } //while end









   }//ending for int main
使用名称空间std;
int main()
{
while(true){
系统(“cls”);
查尔特;
字符串fname1,fname2;
整数i,x,z,y,name1len=0,name2len=0,b,总计,name1spc=0,name2spc=0;

我可以尝试使用goto——为什么?循环是实现这一点的结构化方法。你考虑过使用循环吗?我添加了全部代码,以便你能明白我的意思。实际上,循环是完成这项工作的正确工具。除非你有明确的理由不使用循环(例如,你这样做是为了一项禁止将循环用作练习的任务),这就像在不使用面包的情况下制作三明治:)现在的问题是我无法输入第一个名字,它会跳到合作伙伴的名字。使用cin.ignore();打印“输入您的全名”:。我已经更新了答案中的代码,请检查。getline的问题是它将previos输入存储在cin对象中,要忽略之前的输入,我们必须使用cin.ignore()函数。