在Windows上使用C++启动程序后立即关闭

3

我安装了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并运行它时,Windows会弹出一个窗口并显示“hello world”,但随即立即关闭。当我在Mac OSX上运行此操作时,没有问题,窗口会一直保持打开状态,直到我决定关闭它。现在我知道有一个命令

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

这将给我带来更或者 less 相同的效果,但我想知道为什么 Windows 与 OSX 不同,并且我可以做些什么来修复它(因为这让我非常烦恼)。


Windows和OSX的做法不同,因为它们并不相同。这是微软做出的任意设计决策,并且在许多版本的Windows中都保持不变,因此不太可能改变。 - Mark Ransom
@MarkRansom:微软和Linux都会这样吗?为什么操作系统要分配一个控制台来运行程序呢? - xtofl
@xtofl,当您双击控制台程序时,有两种可能的正确结果 - 显示错误消息,说明只能从控制台运行,或者打开新的控制台以在其中运行。打开新的控制台显然更方便。我真的不明白为什么他们不保持它在这种情况下处于打开状态,这也让我感到很烦恼。 - Mark Ransom
4个回答

3

Eclipse不应该有一些方法来阻止它发生吗?我理解你的答案并接受它,只是想知道Eclipse是否有任何解决方法。 - pipsqueaker117
我找到了一些关于如何为控制台设置Eclipse的文档,我会尝试这个(不过没有保证):
  1. 外部工具
  2. 您应该已经有一个运行程序的配置,最可能是在其中一个字段中设置了cmd.exe的位置。
  3. 在路径末尾添加 /K。 /K命令可以防止窗口自动关闭。
我不确定这是否有效,但我知道/K本身就有效,并且似乎您可以设置cmd.exe程序的路径。如果有效,请告诉我们!
- Stegrex
等等,什么?外部工具?这是在Eclipse内部吗? - pipsqueaker117
@pipsqueaker117 这里有更多关于它的文档:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-exttools-running.htm&cp=0_3_12_4不幸的是,我没有运行Eclipse,所以无法在这方面为您提供帮助,但尝试一下看看是否可以解决您的问题是一个好主意。 - Stegrex

1
不要使用system("pause"),因为有很多原因是错误的(可以在这里阅读更多信息)。
return之前加上cin.get(),窗口将保持打开状态,直到您按下回车键。

我不喜欢为了某个特定平台而改变程序逻辑。这个更改将需要在 Mac 上按两次回车键。 - xtofl
我不会称之为“改变程序逻辑”。主要的是,OP可以使用相同的代码在两个操作系统上查看程序的结果,而不受IDE设置和怪癖的影响。 - Gabriel Negut

1

如果您只想运行控制台程序,您应该打开控制台并运行它。

显然,Eclipse的OSX版本配置为打开控制台并运行程序,而不关闭它。也许您也可以配置Win版本。

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

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


0
只需在返回之前添加getch();,并添加#include<conio.h>。这与编程有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接