【问题标题】:C++ on windows closes a program immediately after launchingWindows 8 上的 C++ 在启动后立即关闭程序
【发布时间】:2012-12-12 06:07:55
【问题描述】:

我安装了 minGW 和 eclipse CDT,但控制台一直在做一些奇怪的事情。该程序的代码是

using namespace std;
#include <iostream>

int main() {
    cout << "Hello, windows (8, c++)" << endl;
    //system("PAUSE");
    return 0;
}

你们都知道,它是 Hello World 程序。现在,当我运行它时,Eclipse 控制台会显示一些关于构建的内容,然后变为空白。当我在资源管理器中导航到 HelloWorldProgram.exe 并运行它时,一个窗口会闪现并显示“hello world”,然后立即关闭。当我在 Mac OSX 上执行此操作时,没有问题,并且窗口会一直保持到我决定关闭它为止。现在我知道有一个命令

system("PAUSE") //I dont know what I need to import to use this. Could you tell me that too?

这会给我或多或少相同的效果,但我想知道为什么 Windows 的做法与 OSX 不同,以及我能做些什么来修复它(这让我很恼火)。 期待您的回复!

【问题讨论】:

  • Windows 的做法与 OSX 不同,因为它与 OSX 不同。这是 Microsoft 做出的任意设计决定,对于许多版本的 Windows 来说都是相同的,因此不太可能改变。
  • @MarkRansom: ..by Microsoft...和 Linux?为什么操作系统分配控制台来运行程序?
  • @xtofl,当您双击控制台程序时,有两种可能的正确结果 - 显示一个错误,说明您只能从控制台运行它,或者打开一个新的控制台来运行它。打开一个新的控制台显然更方便。我真的不明白他们为什么在这种情况下不保持开放,这也让我很烦。

标签: c++ windows eclipse macos


【解决方案1】:

这发生在 Windows 上,因为这只是 Windows 控制台的行为。如果您不希望在程序执行后自动关闭窗口,则必须手动打开控制台,然后通过您打开的控制台运行程序。

你可能想看看这些:

What is the Best Practice for Combating the Console Closing Issue?

https://superuser.com/questions/186562/how-can-i-keep-the-terminal-open

【讨论】:

  • 不应该 Eclipse 有什么办法阻止它发生吗?我得到你的答案的有效性并接受它,只是想知道 Eclipse 是否有任何修复它。
  • 我找到了一些关于如何为控制台设置 Eclipse 的文档,我会尝试一下(但不能保证): 1. 外部工具 2. 你应该已经有了运行程序的配置,很可能您在其中一个字段中设置了cmd.exe 的位置。 3. 在路径末尾添加`/K`。 /K 命令防止窗口自动关闭。我不确定这是否可行,但我知道 /K 可以自行工作,而且您似乎可以设置cmd.exe 程序的路径。请让我们知道它是否有效!
  • 等等,什么?外部工具?这是在eclipse中吗?
  • @pipsqueaker117 这里有更多关于它的文档:help.eclipse.org/juno/… 不幸的是,我没有运行 Eclipse,所以我无法帮助你,但尝试看看这是否是一件好事解决您的问题。
【解决方案2】:

不要使用system("pause"),有多种原因是错误的(阅读更多关于它的信息here)。

cin.get() 放在return 之前,窗口将保持打开状态,直到您按下回车键。

【讨论】:

  • 我不喜欢为特定平台更改程序逻辑。更改将需要您在 Mac 上按两次 Enter。
  • 我不会称之为“改变程序逻辑”。主要的是 OP 可以使用相同的代码在两个操作系统上查看他的程序的结果,而不取决于 IDE 的设置和怪癖。
【解决方案3】:

如果你只想运行你的控制台程序,你应该打开一个控制台,然后运行它。

显然,Eclipse 的 OSX 版本被配置为打开一个控制台,然后运行程序,而不是关闭它。也许你也可以这样配置Win版本。

不应该干预您的程序以在另一个平台上表现不同,而是将其包装成“适应”行为的东西。

您可能可以告诉 eclipse 使用“cmd /c'yourprogram.exe && pause'”来打开命令窗口并让它执行您的程序然后暂停。

【讨论】:

    【解决方案4】:

    返回前加getch();,加#include &lt;conio.h&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多