C++ 是否有一种从函数内部关闭程序的正确方法?
我目前正在制作一个包含菜单和子菜单的程序,我希望有机会从任何子菜单(功能内部)关闭整个程序。我知道我可以用不同的方法来做(我现在用的方法和我知道可以做的方法如下),但是为了将来的使用(我可以证明是有用的),我想知道: 有没有办法从函数中正确地关闭程序 我读了一些答案,从中我得到的是:C++ 是否有一种从函数内部关闭程序的正确方法?,c++,cmd,C++,Cmd,我目前正在制作一个包含菜单和子菜单的程序,我希望有机会从任何子菜单(功能内部)关闭整个程序。我知道我可以用不同的方法来做(我现在用的方法和我知道可以做的方法如下),但是为了将来的使用(我可以证明是有用的),我想知道: 有没有办法从函数中正确地关闭程序 我读了一些答案,从中我得到的是: 我不应该简单地终止代码 我不应该使用任何特定于系统的代码来避免兼容性问题 一点澄清-这是我个人教育目的的计划,所以不必担心,但我宁愿在一开始就学习正确的方法来处理这些情况,也不愿意在以后发现如何处理这些情况并不得不
//跳过与问题无关的代码位
无效子菜单()
{
字符a=0;
系统(“cls”);//当我找到其他清除屏幕的方法时,还没有改变
std::cout此代码将如您所述工作。
int main()
{
int a;
while (true)
{
system("cls"); //yet to get changed when i'll find other way of clearing screen
cout << "Pick what you want to do:\n"
<< "---------------------------------------------------------\n"
<< "1.Sub_menu\n"
<< "2.foo\n"
<< "3.bar\n"
<< "---------------------------------------------------------\n"
<< "0. to close\n";
cin >> a ;
if (a == 0)
{
return 0 ;
}
else if (a == 1)
{
char b;
while (true)
{
system("cls");
cout << "Pick function:\n"
<< "---------------------------------------------------------\n"
<< "1.Foobar_1\n"
<< "---------------------------------------------------------\n"
<< "b to go back to menu menu\n"
<< "x to close\n";
cin >> b;
if (b == '1')
{
foobar_1();
}
else if (b == 'B' || b == 'b')
{
break;
}
else if (b == 'x' || b == 'X')
{
return 0;
}
else
{
cout << "invalid input";
}
}
}
else if (a == 2)
{
foo();
}
else if (a == 3)
{
bar();
}
else
{
cout << "invalid input";
}
}
return 0;
}
intmain()
{
INTA;
while(true)
{
系统(“cls”);//当我找到其他清除屏幕的方法时,还没有改变
cout exit()应该始终干净地终止您的程序,并且与系统不同(“exit”)是标准和平台独立的一部分。@Zinki“应该”和“将”之间有区别。此外,您也没有提到对此假设负责的人:程序员应该以一种在大多数情况下都可以终止的方式编写代码,而无需调用析构函数来释放资源。@Zinki,exit()不在C++代码中调用大多数析构函数。它不会解除堆栈。我希望防御编程尽量减少由“代码< >”()/代码>引起的损坏,但命令<代码>退出()似乎不现实。
应该总是干净地终止这个过程。@zinki-我不想使用它,因为@grek40和@eryksun写了些什么。根据我链接的第一个主题,使用exit()
会让程序表现得像海滩上的游客一样,在离开时留下所有的垃圾(请原谅我奇怪的比较).但另一方面,如果它能恰当地完成它的工作,那么拥有这样的便利将是一件好事(就像它从主管道内部关闭一样).好吧,那么,我想有必要从main关闭程序。也许我会尝试一点额外的全局变量,如果从函数返回,那么将关闭循环,main将像平常一样关闭。虽然这看起来有点老套,但可能这种方法唯一的缺点是我对它的看法。谢谢供参考。当您调用函数时,main处于暂停状态,当您从函数返回时,main的状态变为未暂停。希望此答案对您有所帮助
//skipping unrelevant to question bits of code
void main()
{
char a=0;
system("cls"); //yet to get changed when i'll find other way of clearing screen
std::cout << "Pick what you want to do:\n"
<< "---------------------------------------------------------\n"
<< "1.Sub_menu\n"
<< "2.foo\n"
<< "3.bar\n"
<<"---------------------------------------------------------\n"
<< "ESC to close\n"
while (a != 27)
{
a = _getch();
switch (a)
{
case 49:
{
{
char b=0;
system("cls");
std::cout << "Pick function:\n"
<< "---------------------------------------------------------\n"
<< "1.Foobar_1\n"
<<"---------------------------------------------------------\n"
<< "ESC to go back to menu menu\n"
<< "x to close";
while (b != 27)
{
b = _getch();
switch (b)
{
case 49:foobar_1(); break;
case 120:
case 88: a=27; break;
default: break;
};
};
return;
}
}
; break;
case 50:foo(); break;
case 51:bar(); break;
case 120:
case 88: system("exit"); break; //i'd like to replace that part
default: break;
};
};
return;
}
int main()
{
int a;
while (true)
{
system("cls"); //yet to get changed when i'll find other way of clearing screen
cout << "Pick what you want to do:\n"
<< "---------------------------------------------------------\n"
<< "1.Sub_menu\n"
<< "2.foo\n"
<< "3.bar\n"
<< "---------------------------------------------------------\n"
<< "0. to close\n";
cin >> a ;
if (a == 0)
{
return 0 ;
}
else if (a == 1)
{
char b;
while (true)
{
system("cls");
cout << "Pick function:\n"
<< "---------------------------------------------------------\n"
<< "1.Foobar_1\n"
<< "---------------------------------------------------------\n"
<< "b to go back to menu menu\n"
<< "x to close\n";
cin >> b;
if (b == '1')
{
foobar_1();
}
else if (b == 'B' || b == 'b')
{
break;
}
else if (b == 'x' || b == 'X')
{
return 0;
}
else
{
cout << "invalid input";
}
}
}
else if (a == 2)
{
foo();
}
else if (a == 3)
{
bar();
}
else
{
cout << "invalid input";
}
}
return 0;
}