C++ if语句,从其他语句中重复 刚开始在大学里做C++,所以我决定尝试用C++做一个经典的“商店项目”。

C++ if语句,从其他语句中重复 刚开始在大学里做C++,所以我决定尝试用C++做一个经典的“商店项目”。,c++,loops,if-statement,C++,Loops,If Statement,我只是想知道是否有任何方法可以重复来自else的if语句。例如,在代码中,我询问用户是否愿意帮助浏览商店,如果他们回答“是”,则会显示选项;如果他们回答“否”,则会继续使用代码;但是,如果不是“是”或“否”,则代码会告诉用户无法理解用户 我要问的是,我是否可以让用户再次输入值,然后它在不使用循环的情况下重新运行if语句,或者我是否必须使用循环 下面是一些代码: cin >> help; if (help == "Yes" || help == "yes") { cout &l

我只是想知道是否有任何方法可以重复来自else的if语句。例如,在代码中,我询问用户是否愿意帮助浏览商店,如果他们回答“是”,则会显示选项;如果他们回答“否”,则会继续使用代码;但是,如果不是“是”或“否”,则代码会告诉用户无法理解用户

我要问的是,我是否可以让用户再次输入值,然后它在不使用循环的情况下重新运行if语句,或者我是否必须使用循环

下面是一些代码:

cin >> help;
if (help == "Yes" || help == "yes")
{
    cout << "These are out current sections that you are able to browse:" << endl;
    cout << "-Offers and Deals (1) \n-Computing (2) \n-Console (3) \n-Audio (4) \n-Electronic Displays (5) \n-Cabling (6) \n-General Accessories (7)" << endl;
}
else if (help == "No" || help == "no")
{
    cout << "You have chosen not to look at our browsing list." << endl;
}
else
{
    cout << "Sorry the system does not understand what you have entered. \n Please use full English (Yes/No)." << endl;

}
如果有人能帮我,那就太好了。 我知道它的代码很简单,而且可能有很多更有效的方法,就用我目前在大学里学到的方法

先谢谢你

不使用循环,还是必须使用循环

有很多方法可以在不使用循环的情况下实现这一点,但循环正是允许您在条件为真时重复代码块的构造

这明确表达了你的意图,并达到了你想要的结果

void menu()
{
    while (true)
    {
        int i; std::cin >> i;

             if (i == 0) { action0(); }
        else if (i == 1) { action1(); }
        else if (i == 2) { break; /* Return to caller */ }
        else             { /* Invalid selection, retry */ }
    }
}
另一个合理的解决方案是使用递归。例如:

void menu()
{
    int i; std::cin >> i;

         if (i == 0) { action0(); }
    else if (i == 1) { action1(); }
    else if (i == 2) { return; /* Return to caller */ }
    else             { menu(); /* Invalid selection, retry */ }
}
但是,与循环相比,这可能有几个缺点。引述评论:

如果不能使用循环,递归是一种合理的选择,但值得一提的是它的缺点。例如,如果尾部调用优化没有发挥作用,那么重复出现的次数可能会受到限制。如果是这样的话,那么实际上就有一个隐藏的循环。同样值得一提的是,你不能用main做这件事。许多初学者在第一次发现递归时都会犯这个错误

不使用循环,还是必须使用循环

有很多方法可以在不使用循环的情况下实现这一点,但循环正是允许您在条件为真时重复代码块的构造

这明确表达了你的意图,并达到了你想要的结果

void menu()
{
    while (true)
    {
        int i; std::cin >> i;

             if (i == 0) { action0(); }
        else if (i == 1) { action1(); }
        else if (i == 2) { break; /* Return to caller */ }
        else             { /* Invalid selection, retry */ }
    }
}
另一个合理的解决方案是使用递归。例如:

void menu()
{
    int i; std::cin >> i;

         if (i == 0) { action0(); }
    else if (i == 1) { action1(); }
    else if (i == 2) { return; /* Return to caller */ }
    else             { menu(); /* Invalid selection, retry */ }
}
但是,与循环相比,这可能有几个缺点。引述评论:

如果不能使用循环,递归是一种合理的选择,但值得一提的是它的缺点。例如,如果尾部调用优化没有发挥作用,那么重复出现的次数可能会受到限制。如果是这样的话,那么实际上就有一个隐藏的循环。同样值得一提的是,你不能用main做这件事。许多初学者在第一次发现递归时都会犯这个错误


使用循环有什么问题?需要使用循环。如果不能使用循环,可以使用goto语句。然而,像上面的人一样,使用循环更实用said@Tau:请不要向初学者建议使用goto。@Tau使用goto基本上是有一个循环,滥用goto是非常糟糕的做法。使用循环有什么错?你需要使用循环。如果不能使用循环,你可以使用goto语句。然而,像上面的人一样,使用循环更实用said@Tau:请不要向初学者建议使用goto。@Tau使用goto基本上是有一个循环,滥用goto是非常糟糕的做法。如果您有注释/*退出程序*/,实际效果是从函数返回。调用方决定控件返回时会发生什么。我不确定在这里提到递归是否是一个好主意,因为编译器不一定做尾部递归优化。在这种情况下,您可能会在一段时间后收到stackoverflow。如果您有注释/*退出程序*/,实际效果是从函数返回。调用方决定控件返回时会发生什么。我不确定在这里提到递归是否是一个好主意,因为编译器不一定做尾部递归优化。在这种情况下,您可能会在一段时间后出现堆栈溢出。