重新运行我的主要方法
Rerunning my main method
我刚刚通过终端控制台命令完成了 运行 的图像编辑器。编辑图像后,我试图让整个程序(通过 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()
returns -1,它将被重新执行,就像它被再次调用一样。所有其他 return 值从 main()
本身获得 returned,并为您的 C++ 实现携带它们所做的任何暗示。
请随意使用 your_real_main()
中的任何特殊 return 值来实现此行为,而不是 -1。
当然,您有责任采取一切必要措施使这项工作正常进行。比如清理你分配的所有资源,所以到 your_real_main()
returns 的时候,已经分配的所有资源都被释放了,你的应用程序的状态和它启动时的状态是一样的(所有 dynamically-allocated 内存已释放,所有文件已关闭,等等...)。
通过一些周密的计划,也可以通过使用 carefully-thrown 异常而不是特殊的 return 值来实现相同的结果。然后可能有操作system-specific实现相同目标的方法,例如Linux上的exec()
,还有...
我刚刚通过终端控制台命令完成了 运行 的图像编辑器。编辑图像后,我试图让整个程序(通过 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()
returns -1,它将被重新执行,就像它被再次调用一样。所有其他 return 值从 main()
本身获得 returned,并为您的 C++ 实现携带它们所做的任何暗示。
请随意使用 your_real_main()
中的任何特殊 return 值来实现此行为,而不是 -1。
当然,您有责任采取一切必要措施使这项工作正常进行。比如清理你分配的所有资源,所以到 your_real_main()
returns 的时候,已经分配的所有资源都被释放了,你的应用程序的状态和它启动时的状态是一样的(所有 dynamically-allocated 内存已释放,所有文件已关闭,等等...)。
通过一些周密的计划,也可以通过使用 carefully-thrown 异常而不是特殊的 return 值来实现相同的结果。然后可能有操作system-specific实现相同目标的方法,例如Linux上的exec()
,还有...