系统("PAUSE")的替代品?

Alternative to system("PAUSE")?

本文关键字:替代品 PAUSE 系统      更新时间:2023-10-16

我最近读到system("PAUSE")有多糟糕。我尝试了cin.get()但我不知道如何使用它来暂停程序。其他帖子说在声明后加一个breakpoint。但我不知道如何做到这一点。关于如何暂停我的程序的任何建议?一个例子将不胜感激。

假设您确实在Windows上工作,那么system("PAUSE")最糟糕的事情是它暴露了对操作系统体系结构的根本误解。你不需要为system("PAUSE")替换代码,因为代码是解决感知问题的错误位置

初学者喜欢将system("PAUSE")甚至便携式替代方案(如std::cin.get())放在程序的末尾,否则程序结束后"窗口就会消失"。然而,这种逻辑存在严重缺陷。您在程序运行时可能看到的窗口并使您提出此问题的窗口不是程序本身的一部分,而是程序运行环境的一部分

但是,典型的控制台程序不得假定有关执行它的环境的详细信息。相反,当涉及到通过std::coutstd::cin输入和输出时,您必须学会以更抽象的术语思考。谁说你的程序甚至对人类用户可见?您可以读取或写入文件;您可以使用管道;您可以将文本发送到网络套接字。你不知道。

#include <iostream>
int main()
{
    std::cout << "Hello worldn"; // writes to screen, file, network socket...
}

打开图形窗口并在屏幕上显示文本输出不在程序的范围内,但使用system("PAUSE")完全假设一个用例并破坏所有其他用例。

如果您使用像Visual Studio这样的IDE,并且对按F5最终导致窗口在您有机会看到所有输出之前消失这一事实感到恼火,那么这里有三种比操作程序本身更明智的选择:

  • 揭秘。请注意,Visual Studio 真正要做的是在后台调用 Visual C++ 编译器以创建 *.exe 文件。使用 cmdVisual Studio 命令提示符>工具打开您自己的控制台窗口,找到该 *.exe 文件的目录并在那里运行它(您最终还应该学会在没有 Visual Studio 帮助的情况下启动编译器,因为这将使您更深入地了解C++生成过程)。
  • 按 Ctrl+F5。
  • 在代码末尾放置断点。如果您不知道如何操作,请阅读文档。

我更近了一步,cin.ignore,但用户只有在他/她想继续时才能按回车键。使用 cin.ignore() 的示例:

#include <iostream>
int main()
{
    cout << "Press enter to continue!n";
    cin.ignore();
    //do something
    return 0;
}

当您按回车键时,它会前进并执行您想要它执行的任何操作。