系统("PAUSE")的替代品?
Alternative to system("PAUSE")?
我最近读到system("PAUSE")
有多糟糕。我尝试了cin.get()
但我不知道如何使用它来暂停程序。其他帖子说在声明后加一个breakpoint
。但我不知道如何做到这一点。关于如何暂停我的程序的任何建议?一个例子将不胜感激。
假设您确实在Windows上工作,那么system("PAUSE")
最糟糕的事情是它暴露了对操作系统体系结构的根本误解。你不需要为system("PAUSE")
替换代码,因为代码是解决感知问题的错误位置。
初学者喜欢将system("PAUSE")
甚至便携式替代方案(如std::cin.get()
)放在程序的末尾,否则程序结束后"窗口就会消失"。然而,这种逻辑存在严重缺陷。您在程序运行时可能看到的窗口并使您提出此问题的窗口不是程序本身的一部分,而是程序运行环境的一部分。
但是,典型的控制台程序不得假定有关执行它的环境的详细信息。相反,当涉及到通过std::cout
和std::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 文件。使用
cmd
或 Visual 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;
}
当您按回车键时,它会前进并执行您想要它执行的任何操作。
- C++中原子的替代品<variant>
- C++sscanf_s的替代品
- 系统( "pause" ) 即使使用正确的标头也无法正常工作
- getline的替代品
- 什么是 std::function::argument_type 的替代品?
- 有DirectShow的替代品吗?
- 智能指针作为 QObject::d eleteLater() 的替代品
- C++中 mktime 的替代品
- 对于C++,是否有任何现代的 std::strchr() 替代品?
- 除了系统("pause")之外,是否有其他选项可以保持可执行文件打开?
- 什么__asm挥发性("pause" ::: "memory");男孩
- shared_future是<void>condition_variable的合法替代品吗?
- 在Visual Studio C ++系统中使用freopen()时,"pause" )不起作用
- 这是山塔的替代品
- STD :: Referent_wrapper/std :: std :: vector的selution_ptr替代品
- 更好的替代品?
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 提升勒让德多项式的 gsl_sf_legendre_sphPlm_array() 替代品
- 系统("PAUSE")的替代品?
- 系统( "Pause" 的替代品 );重新审视