gpt4 book ai didi

c++ - 重新运行我的主要方法

转载 作者:太空狗 更新时间:2023-10-29 21:35:36 26 4
gpt4 key购买 nike

我刚刚完成了一个通过终端控制台命令运行的图像编辑器。编辑图像后,我试图让整个程序(通过 main() 方法)再次运行,但我对如何操作感到有点困惑。这是我尝试用来重新运行代码的方法。

void rerun()
{
cout << "Would you like to alter another image? (Y/N) ";
string answer;
getline(cin, answer);
while (answer != "Y" || answer != "N")

if (answer == "N") {
return;
}
if (answer == "Y") {
main();
}
}

这没有给我任何东西。我需要修复什么?

最佳答案

C++ 标准禁止直接调用 main(),就像您试图做的那样:

3.6 Start and termination

...

3 - The function main shall not be used within a program.

main() 只能由您的操作系统从您的环境中调用。您不能直接调用它。

因此,您需要重构程序的逻辑,以便在需要时具有重新运行整个程序的效果。例如:

int main(int argc, char **argv)
{
int ret;

do
{
ret = your_real_main(argc, argv);
} while (ret == -1);

return ret;
}

无论你当前的 main() 中有什么,将其重命名为 you_real_main()(并相应地声明它),如果 your_real_main()返回-1,会重新执行,就好像又被调用了一样。所有其他返回值都从 main() 本身返回,并为您的 C++ 实现带来它们所做的任何暗示。

请随意使用 your_real_main() 的任何特殊返回值,而不是 -1,用于此行为。

当然,您有责任采取一切必要措施使这项工作正常进行。例如清理你分配的所有资源,所以当 your_real_main() 返回时,所有分配的东西都已经被释放,你的应用程序的状态与它启动时的状态相同(所有动态分配的内存都已释放,所有文件已关闭,等等...)。

通过一些周密的计划,也可以通过使用小心抛出的异常而不是特殊的返回值来实现相同的结果。然后可能会有特定于操作系统的方法来实现相同的目标,例如 Linux 上的 exec(),还有...

关于c++ - 重新运行我的主要方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com