c++ - C++ If 语句,从 else 重复
问题描述
刚在大学开始使用 C++,所以我决定尝试使用 C++ 做一个经典的“商店项目”。
如果有任何方法可以重复 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 */ }
}
然而,与循环相比,这可能有几个缺点。从评论中引用François Andrieux的话:
如果不能使用循环,递归是一个合理的选择,但值得一提的是它的缺点。例如,如果尾调用优化没有发挥作用,您可以重复的次数可能会受到限制。如果是这样,那么你基本上有一个隐藏的循环。还值得一提的是,您不能使用
main
. 这是许多初学者在第一次发现递归时犯的错误。
推荐阅读
- javascript - 停止计划的推送通知在反应本机推送通知中
- java - Eclipse Java 更新
- python - ValueError:输入 0 与层 bidirectional_1 不兼容:预期 ndim=3,发现 ndim=2
- arrays - 如何在数组中查找元素并仅使用 $project 返回这些元素?
- haskell - 如何在 Haskell 案例中使用“<0”条件
- wordpress - Wordpress REST Api:add_action('rest_api_init', callback) 不调用回调
- laravel - VueJS - 如何将输入参数传递给单页组件
- c# - 在异步 MongoDb 调用中检查存储操作的状态
- powershell - Powershell脚本不会覆盖文件,但会创建一个新文件并覆盖它
- apache-kafka - Confluent Replicator 为同一个集群复制配置模式注册表