有没有办法让控制台窗口在程序结束后保持打开,并在按下一个按键后关闭?

6
一种命令行程序在执行完毕后会自动关闭窗口。我知道可以使用cin.get();等待用户输入。有没有一种方法,让用户按下任意键(而不是输入然后按回车)来关闭程序?我不想使用system("PAUSE"),因为它只适用于Windows操作系统且速度较慢。 我希望程序能够暂停,以便用户可以看到成功完成和其他细节。它可能不会从已经打开的命令行运行,并且可执行文件将被双击运行。

2
一个命令行程序没有窗口可以关闭。它应该简单地输出到与输入命令行的窗口相同的窗口中。 - David Schwartz
1
@pst:在想让窗口永久存在的情况下,调用临时窗口中的程序是一种错误的调用方式。在便携式程序中无法修复该问题,因为便携式程序无法判断自身是否处于窗口中。(在所有情况下暂停都会破坏程序与管道或重定向文件等功能之间的交互。这是非常糟糕的选择。) - David Schwartz
1
为什么你抱怨没有“PAUSE”时程序瞬间执行,而有了“PAUSE”后却太“慢”?这样说法很困惑。 - Mooing Duck
1
@Celeritas - 看起来有很多毫无意义的争论。两个建议:1)如果你想让你的程序“暂停”,一个好的、可移植的方法是使用“std::cin.get()”。这就是我一开始尝试建议的。2)如果你想让Windows暂停你的程序,可以使用“start /wait”来调用它。希望这能帮到你。 - paulsm4
1
@Celeritas:正确的解决方案要么是教育用户如何运行命令行程序,要么是在Windows上提供GUI程序而不是命令行程序。不幸的是,这些都不是非常方便的选择。 - David Schwartz
显示剩余12条评论
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0

是的。system("PAUSE")是一种方法。一个简单的getchar()或cin应该是完全等效的 :)


2
不,system("PAUSE") 不是唯一的方法。这是一个C++问题。你不知道在任意的C++机器上,“PAUSE”可能会做什么。 - David Schwartz
2
@David Schwartz - 看着吧,你关于“没有关闭窗口”的粗鲁评论完全是站不住脚的。我们都知道OP的意思是“出现了一个Windows命令提示符,我想让它一直保持到用户解除它。” “System(”PAUSE“)”是在Windows上实现这一点的一种方式(尽管很差)。 “std :: cin.get()”更可取。那就是我建议的全部内容。 - paulsm4
1
正如David所说,不要使用system("PAUSE");,而应该使用getcharcin - Rivasa
2
OP不是在Windows上。OP明确表示他不想使用system("PAUSE"),因为它是特定于Windows的。如果OP只在Windows上,那有什么关系呢? - David Schwartz

-1

这是操作系统的选项,而不是C/C++中的选项。它需要控制终端的打开和关闭方式,就像调用批处理或命令行应用程序一样。

由于平台依赖性太强,无法在此处发布代码或配置(基本上是我们IDE中带有onClose语句的控制台GUI应用程序)。


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