我正在尝试制作一个小程序,询问用户他们是否是人类,然后再做其他一些事情。以下是代码的片段,其中询问用户他们是否是人。现在,如果您输入除yes或no之外的任何内容,程序将循环使用'goto'语句。我遇到的问题是if语句,当它们结束时,转到这个'goto'语句,从而在程序结束时循环。如何才能使goto语句成为第二个if语句的一部分?如果失败了,我应该使用另一种循环结构吗?任何帮助将不胜感激。
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
int main ()
{
go:
string i;
cout << "Are you Human?>"<<endl;
cin >> i;
if (i == "yes"&&"Yes")
cout<< "Cool"<<endl;
else if (i == "no"&&"No")
cout<< "Interesting"<<endl;
else if (i!= "yes"&&"Yes"&&"no"&&"No")
cout<< "A simple Yes or No will suffice..."<<endl;
goto go;
system("pause");
return 0;
}
答案 0 :(得分:3)
您真的需要学习如何在C ++中编写if-conditions。例如,您需要更改
if (i == "yes"&&"Yes")
到
if (i=="yes" || i=="Yes")
能够检查i
是yes
还是Yes
。并相应地改变其他人。
您需要使用大括号来定义范围而不仅仅是代码缩进(这只适合您,而不适用于编译器)。例如,
else if (... ...)
{
cout<< "A simple Yes or No will suffice..."<<endl;
goto go;
}
答案 1 :(得分:1)
您必须将goto语句放在此else-if的代码块中。
else if (i!= "yes"&&"Yes"&&"no"&&"No")
{
cout<< "A simple Yes or No will suffice..."<<endl;
goto go;
}
还要考虑条件为
else if (i!= "yes"&&"Yes"&&"no"&&"No")
或
if (i == "yes"&&"Yes")
无效,实际上最后一个条件是等于
if ( ( i == "yes" ) && ( "Yes" ) )
因为“是”被隐式转换为指向其第一个字符的指针,然后表达式“是”将始终等于true且条件等效于
if ( i == "yes" )
使用goto语句通常也是一个非常糟糕的主意。你应该忘记在C / C ++中有goto语句。相反,你应该使用控制结构作为while或do-while。
例如
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main ()
{
string s;
do
{
cout << "Are you Human?>" < <endl;
cin >> s;
bool answer;
if ( answer = ( s == "yes" || s == "Yes" ) )
cout << "Cool" << endl;
else if ( answer = ( s == "no" || s == "No" ) )
cout << "Interesting" << endl;
else
cout << "A simple Yes or No will suffice..." << endl;
} while ( !answer );
system( "pause" );
return 0;
}
答案 2 :(得分:0)
如果你想接受“是”或“是”,你应该写下这样的条件:
if (i=="yes" || i=="Yes")
但更好的解决方案是将字符串的字母设置为相同的情况(下部或上部)然后进行比较。
答案 3 :(得分:0)
int main ()
{
go:
string i;
while(1)
{
cout << "Are you Human?>"<<endl;
cin >> i;
if (i == "yes"|| i == "Yes")
cout<< "Cool"<<endl;
else if (i == "no"|| i == "No")
cout<< "Interesting"<<endl;
else
{
cout<< "A simple Yes or No will suffice..."<<endl;
break;
}
}
system("pause");
return 0;
}
不要忘记,如果你没有在语句后面加上大括号,那么只会执行以下语句。