我有一个简单的控制台应用程序,它输出一个菜单并等待用户输入.执行适当的操作后,整个过程重复进行.输入特定字符串时,程序退出.这是通过无限循环和早期返回语句实现的:
int main()
{
while (true)
{
OutputMenu();
string UserChoice;
cin >> UserChoice;
// ...
if (UserChoice == "exit") return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的老师的说法,使用无限循环并使用return语句破解我的方法是不好的做法.他建议如下:
int main()
{
bool ShouldExit = false;
while (!ShouldExit)
{
OutputMenu();
string UserChoice;
cin >> UserChoice;
// ...
if (UserChoice == "exit") ShouldExit = true;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 11
这可能do...while是适当的罕见情况之一.我避免添加额外的布尔状态变量,除非它们真正使代码更清晰.
int main()
{
string UserChoice;
do
{
OutputMenu();
cin >> UserChoice;
// ...
} while (UserChoice != "exit");
}
Run Code Online (Sandbox Code Playgroud)
但是,对于用户输入循环,我通常会创建一个函数来返回输入是否成功.如果cin关闭,代码很容易以无限循环结束.
例如
bool GetNonExitInput( std::istream& in, std::string& s )
{
OutputMenu();
in >> s;
return in.good() && s != "exit";
}
int main()
{
std::string UserChoice;
while (GetNonExitInput(std::cin, UserChoice))
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
真的要么很好,但你需要做你教授想要的.你会发现它在工业上也是一样的.一些公司可能有一个编码标准,规定花括号在一个新的线上,而其他公司希望他们从开始阻止的线开始.没有真正的理由选择一个而不是另一个,所以最好只选择领导者想要的东西.
这两种方法的唯一区别在于,在第二种方法中,在退出while循环后仍然可以执行某些操作,而在第一种方法中,您将从函数本身返回; 你之后什么也做不了while.
但是,我会建议这个简单的代码:您可以使用break如下代码来维护变量:
while (true)
{
//your code
if (UserChoice == "exit")
break;
//your code
}
Run Code Online (Sandbox Code Playgroud)
ShouldExit不再需要变量了!
取决于语言.如果你用C语言写作,那么"一个入口,一个退出"的理念是有意义的 - 你想要一个地方,你正在清理一个函数使用的资源,这样你就没有机会忘记以后了.如果您使用的是C++,那么无论如何您应该使用RAII进行清理,在这种情况下,我完全不同意您的老师.return根据需要使用s,以使代码尽可能清晰.
(虽然我会使用for (;;)而不是while (true)在C++中生成无限循环)
| 归档时间: |
|
| 查看次数: |
4302 次 |
| 最近记录: |