这可能是一个令人尴尬的问题,因为答案无疑是显而易见的。

我已经使用Visual Studio很多年了,但这是我第一次做任何“控制台应用程序”开发。

当我运行我的应用程序时,控制台窗口弹出,程序输出出现,然后当应用程序退出时窗口关闭。

是否有一种方法可以让它一直打开直到我检查输出,或者在窗口关闭后查看结果?


当前回答

因为从VS运行它会附加VS调试器,你可以检查附加的调试器:

if (Debugger.IsAttached)
{
    Console.WriteLine("Debugger is attached. Press any key to exit.");
    Console.ReadKey();
}

我想唯一需要注意的是,如果附加任何其他调试器,它仍然会暂停,但这甚至可能是一种需要的行为。

其他回答

如果你运行时没有调试(Ctrl+F5),那么默认情况下它会提示你按回车键关闭窗口。如果要使用调试器,应在最后一行上放置断点。

(/子系统:控制台)不为我的vs2013工作(我已经有了它)。

“不调试地运行”不是一个选项,因为我不想在调试和查看输出之间切换。

我以

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

qtcreator pre 2.6中使用的解决方案。qt在增长,vs在相反方向。我记得,在vs2008中我们不需要这样的技巧。

要么使用:

cin.get();

or

休息system (" ");

确保将它们中的任何一个放在main()函数的末尾和return语句之前。

您可以从命令提示符运行可执行文件。这样您就可以看到所有的输出。或者,你可以这样做:

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

这样,直到您为a变量输入数据,窗口才会关闭。

一个更好的解决方案:

atexit([] { system("PAUSE"); });

在程序开始的时候。

优点:

可以使用std::exit() 可以从主有多个返回 您可以在调试器下运行程序 IDE独立(+ OS独立,如果你使用cin.sync();cin.ignore ();Trick而不是system("pause");)

缺点:

必须修改代码 不会暂停std::terminate() 仍然会发生在IDE/调试器会话之外的程序中;你可以在Windows下使用:


extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}