这是一个我不太明白的问题:
该命令system("pause");
被教给新程序员,作为暂停程序并等待键盘输入继续的方法.然而,许多资深程序员似乎不赞成这种不应该在不同程度上做的事情.
有人说使用起来很好.有人说这只是在你被锁在你的房间而没有人在看的时候使用.有人说,如果你使用它们,他们会亲自到你家里杀了你.
我,我自己是一名没有正式编程培训的新程序员.我使用它是因为我被教导使用它.我不明白的是,如果它不是可以使用的东西,那么我为什么要教它使用它?或者,另一方面,它毕竟不是那么糟糕吗?
你对这个问题有什么看法?
rav*_*uya 77
它不受欢迎,因为它是一个特定于平台的黑客,与实际学习编程无关,而是绕过IDE/OS的一个功能 - 从Visual Studio启动的控制台窗口在程序执行完毕后关闭,等等新用户无法看到他的新程序的输出.
系统中的阻止("暂停")运行Windows命令行"暂停"程序,并在继续执行程序之前等待终止程序 - 控制台窗口保持打开状态,以便您可以读取输出.
更好的想法是在最后放置一个断点并对其进行调试,但这又有问题.
小智 37
这很慢.它取决于平台.这是不安全的.
第一:它的作用.调用"system"就像在Windows命令提示符下键入命令一样.你的应用程序有大量的设置和拆解来进行这样的调用 - 而且开销很简单.
如果将一个名为"pause"的程序放入用户的PATH怎么办?只是调用系统("暂停")只能保证执行一个名为"pause"的程序(希望你没有名为"pause"的可执行文件!)
只需编写自己的"Pause()"函数即可使用_getch.好吧,确定,_getch也是平台相关的(注意:它在"conio.h"中定义) - 但它比system()
在Windows上开发时更好,它具有相同的效果(尽管你有责任提供文本与cout左右).
基本上:当你可以简单地添加两行代码和一个包含并获得更灵活的机制时,为什么会引入这么多潜在的问题?
Gav*_*n H 25
一个简单的getchar()应该做得很好.
Che*_*Alf 21
使用system("pause");
是Ungood Practice™因为
这完全没必要.
为了保持程序的控制台窗口打开,在结束的时候,你从Visual Studio中,使用运行Ctrl+ F5无需调试运行,否则放置一个断点在最后一个右括号}
的main
.所以,在Visual Studio中没问题.当然,从命令行运行它时完全没问题.
从命令行运行程序时会出现问题并且很烦人.对于交互式执行,您必须在最后按一个键无任何目的.并且用于某些pause
非常不受欢迎的任务的自动化!
它不便携.
Unix-land没有标准pause
命令.
该pause
命令是一个内部cmd.exe
命令,不能被覆盖,至少在另一个答案中被错误地声明.即,这不是一个安全风险,并且AV程序诊断它的声明与覆盖命令的声明一样可疑(毕竟,C++程序调用system
能够完成命令解释器可以执行的任何操作,并且更多).此外,虽然这种暂停方式在C++编程的通常标准下效率极低,但在新手程序结束时根本不重要.
所以,在此之前答案的大部分声明是不正确的,你不应该使用的主要原因system("pause")
或者你最后的任何其他等待命令main
,是上面的第一点:它完全没必要,它绝对没有用处,这真是太傻了.
Gav*_*ria 15
您可以使用std::cin.get()
从iostream
:
#include <iostream> // std::cout, std::cin
using namespace std;
int main() {
do {
cout << '\n' << "Press the Enter key to continue.";
} while (cin.get() != '\n');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此外,system('pause')
速度很慢,包括一个你可能不需要的文件:stdlib.h
.它依赖于平台,实际上调用了一个"虚拟"操作系统.
a_m*_*m0d 10
因为它不便携.
pause
Run Code Online (Sandbox Code Playgroud)
是一个仅限Windows/DOS的程序,因此您的代码将无法在Linux上运行.此外,system
通常不被认为是一种非常好的方式来调用另一个程序 - 通常更好地使用CreateProcess
或fork
类似的东西.
归档时间: |
|
查看次数: |
280149 次 |
最近记录: |