C++ If 语句,从其他语句重复

C++ If statement, repeating from else

本文关键字:语句 其他 If C++      更新时间:2023-10-16

刚开始C++大学,所以我决定尝试使用C++做一个经典的'商店项目'。

我只是在徘徊,是否有任何方法可以重复其他人的 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做到这一点。这是许多初学者在第一次发现递归时犯的错误。