C ++ If语句循环结构问题

时间:2014-01-28 13:17:09

标签: c++ loops if-statement

我正在尝试制作一个小程序,询问用户他们是否是人类,然后再做其他一些事情。以下是代码的片段,其中询问用户他们是否是人。现在,如果您输入除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;
}

4 个答案:

答案 0 :(得分:3)

  1. 您真的需要学习如何在C ++中编写if-conditions。例如,您需要更改

    if (i == "yes"&&"Yes")
    

    if (i=="yes" || i=="Yes")
    

    能够检查iyes还是Yes。并相应地改变其他人。

  2. 您需要使用大括号来定义范围而不仅仅是代码缩进(这只适合您,而不适用于编译器)。例如,

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

不要忘记,如果你没有在语句后面加上大括号,那么只会执行以下语句。