在C++程序中暂停控制台

Des*_*tor 49 c++

哪个是在C++程序中暂停控制台的最佳方法?

  1. 运用 cin.get()
  2. 或使用 system("pause")
  3. 或使用像getch()或等的C函数getchar()

使用system("pause")导致非可移植代码并且无法在UNIX中运行是真的吗?

cin.get()最好用于暂停控制台吗?

Seb*_*ach 59

可能有一种最好的方式(比如使用便携式cin.get()),但不存在方法.完成其工作的程序应该退出并将其资源返回给计算机.

是的,任何使用system()导致不可移植的代码,因为参数传递给拥有您的进程的shell.

迟早会在源代码中使用暂停代码会导致麻烦:

  • 有人忘记在登记前删除暂停代码
    • 现在所有的工作伙伴不得不想知道为什么应用程序不再关闭
    • 版本历史被污染了
  • #define 太棒了
  • 对于从控制台运行代码的任何人来说都很烦人
  • 当尝试从脚本中启动和结束程序时,它非常,非常非常烦人; 如果您的程序是shell中管道的一部分,则会产生四倍的烦恼,因为如果程序没有结束,那么shell脚本或管道也不会

相反,探索您的IDE.它可能有一个选项,在运行后不关闭控制台窗口.如果没有,作为开发人员,值得她/他的钱总是在附近打开一个控制台窗口,这是一个很好的理由.

或者,您可以将其设为程序选项,但我个人从未见过带有选项的程序--keep-alive-when-dead.

故事的道德:这是用户的问题,而不是程序的问题.不要污染你的代码.

  • +1.该请求来自需要在IDE运行时读取控制台中的输出,这将在应用程序终止时立即关闭控制台.通过"真实"命令提示符运行的应用程序不会遇到此问题. (2认同)
  • @black:如果 IDE 缺乏保持控制台打开的功能,那么这是始终保持附近控制台打开的一个很好的理由。暂停程序会导致版本控制出现问题,因为迟早有人会忘记再次删除暂停代码,或者导致 #define-macros 出现问题,或者其他什么问题。我想我应该稍微扩展一下我的答案:) (2认同)
  • @PravasiMeet:因为当程序没有结束时,调用该程序的shell脚本或管道也不会结束。 (2认同)
  • @SebastianMach实际上,“that”在这里是正确的,而“which”则不是。从技术上来说。 (2认同)

Mr.*_*C64 16

如果你想编写可移植的C++代码,那么我建议使用cin.get().

system("PAUSE")适用于Windows,因为它需要执行名为" PAUSE" 的控制台命令.但我不确定Linux或其他Unix衍生产品等其他操作系统是否支持这一点.所以这往往是不便携的.

由于C++已经提供cin.get(),我认为使用C没有令人信服的理由getch().

  • 无论如何都不推荐C`getch()`,因为它没有在ISO C++或POSIX中定义(它来自MS`conio.h`). (7认同)
  • conio.h代表CONsole输入/输出,主要用于MS-DOS,出于兼容性原因而留下,显然不是标准的. (2认同)

Nia*_*all 5

最好的方式在很大程度上取决于该平台(一个或多个)作为目标,调试与发布使用等

我认为没有最好的方法,但要以相当通用的方式“强制”等待输入类型场景,尤其是在调试时(通常这是基于NDEBUG或编译进或出_DEBUG),您可以尝试std::getline如下

inline void wait_on_enter()
{
    std::string dummy;
    std::cout << "Enter to continue..." << std::endl;
    std::getline(std::cin, dummy);
}
Run Code Online (Sandbox Code Playgroud)

根据需要,我们没有“输入继续”。