防止在Visual Studio

时间:2018-04-19 14:04:36

标签: c visual-studio console

我在Visual Studio中遇到项目问题。项目创建为空项目,然后添加.c文件。问题是,当我将输入重定向到文件时,控制台会在程序结束后立即关闭。

我尝试转到Properties > Linker > System并选择/SUBSYSTEM:CONSOLE选项,但它没有解决这个问题。这总是对我有用,但现在当我重定向输入时,控制台在程序执行后立即关闭,我看不到输出。

我通过在<"in.txt"中添加Configuration properties > Debugger > Command来重定向输出,它完全按照我想要的方式工作,除了控制台太快关闭。重定向输出时不会发生此问题。

同样使用getchar()scanf(...)system("pause")无效。

我希望通过仅更改一些项目设置来解决这个问题,如果可能的话,不会在程序中添加一些额外的代码,但任何解决方案都会受到赞赏。

编辑:正如我上面所说,我尝试了几件事,包括类似问题的一些答案,但都没有帮助。

1 个答案:

答案 0 :(得分:1)

标准窗口行为是控制台程序在未从现有窗口启动时自动获取新控制台窗口,并且一旦程序结束,此新窗口将自动关闭。因此,强制窗口保持打开程序的关键是防止程序终止。

使用getchar()之类的内容,您可以依赖这些调用阻止这一事实,直到有更多输入可用。只要输入实际来自控制台,这就可以正常工作。但是当您将输入重定向到来自文件时,总会有输入可用 - 要么从文件中读取更多内容,要么您将立即收到错误(例如,对于EOF)。这就是所有这些“伎俩”不再起作用的原因。

一个简单且非常不干净的版本只是在程序结束时添加一个空循环,因此它永远不会退出。在Windows平台上,这可能类似于

for (;;) Sleep(1000);

调用Sleep()(包括windows.h来使用它)确保此循环不会刻录CPU周期。您必须通过按 Ctrl + C 或关闭窗口来强制结束程序。当然,不要将此循环留在最终程序中,从现有控制台窗口启动时会非常烦人。

这个问题可能有更好的解决方案,但我希望我能解释一下为什么会发生这种情况。