Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 系统(“暂停”);-为什么错了?_C++ - Fatal编程技术网

C++ 系统(“暂停”);-为什么错了?

C++ 系统(“暂停”);-为什么错了?,c++,C++,有一个问题我不太明白: 命令,system(“暂停”)被教给新程序员,作为暂停程序并等待键盘输入继续的一种方式。然而,许多资深程序员似乎都不赞成它,认为它不应该在不同程度上完成 有些人说使用它很好。有人说,只有当你被锁在房间里,没有人看着的时候,才可以使用它。有人说,如果你使用你的房子,他们会亲自来杀了你 一、 我自己是一个没有受过正式编程培训的新程序员。我使用它是因为我被教导使用它。我不明白的是,如果它不是什么可以使用的东西,那么为什么我要被教导使用它呢?或者,从另一方面来说,它真的没有那么糟

有一个问题我不太明白:

命令,
system(“暂停”)
被教给新程序员,作为暂停程序并等待键盘输入继续的一种方式。然而,许多资深程序员似乎都不赞成它,认为它不应该在不同程度上完成

有些人说使用它很好。有人说,只有当你被锁在房间里,没有人看着的时候,才可以使用它。有人说,如果你使用你的房子,他们会亲自来杀了你

一、 我自己是一个没有受过正式编程培训的新程序员。我使用它是因为我被教导使用它。我不明白的是,如果它不是什么可以使用的东西,那么为什么我要被教导使用它呢?或者,从另一方面来说,它真的没有那么糟糕吗


您对此有何想法?

总之,当您可以使用像cin.get()这样简单的工具时,它必须暂停程序执行并进行系统调用并分配不必要的资源。人们使用系统(“暂停”)是因为他们希望程序等到他们按enter键时才能看到输出。如果你想让一个程序等待输入,那么内置的函数也可以跨平台且要求较低


文章中有进一步的解释。

不赞成这种做法,因为它是一种特定于平台的黑客行为,与实际学习编程无关,而是为了绕过IDE/OS的一个功能—当程序执行完毕时,从Visual Studio启动的控制台窗口关闭,因此新用户无法看到新程序的输出

Bodding in System(“pause”)运行Windows命令行“pause”程序,并等待该程序终止,然后再继续执行该程序-控制台窗口保持打开状态,以便您可以读取输出


一个更好的办法是在最后放置一个断点并对其进行调试,但这同样存在问题。

因为它不可移植

pause

是一个仅适用于windows/dos的程序,因此您的代码不会在linux上运行。此外,
系统
通常不被认为是调用另一个程序的好方法-通常最好使用
CreateProcess
fork
或类似的方法。

速度很慢。它依赖于平台。这是不安全的

第一:它的作用。调用“系统”实际上就像在windows命令提示符中键入命令。您的应用程序需要进行大量的设置和拆卸才能进行这样的调用,而开销简直是荒谬可笑

如果一个名为“暂停”的程序被放置到用户的路径中,该怎么办?只需调用系统(“pause”)即可确保执行名为“pause”的程序(希望您的可执行文件没有名为“pause”!)

只需编写自己的使用_getch的“Pause()”函数。好的,当然,_getch也依赖于平台(注意:它是在“conio.h”中定义的)-但是如果您在Windows上开发,它比
system()
好得多,并且具有相同的效果(尽管您有责任提供cout左右的文本)

基本上:当你可以简单地添加两行代码和一行include并获得更灵活的机制时,为什么会引入这么多潜在的问题?

  • 慢:它必须跳转通过许多 不必要的Windows代码和 为一个简单的 操作
  • 不可移植:依赖于 暂停程序
  • 不好的风格: 进行系统调用只应 在确实需要时执行
  • 更多 键入:系统(“暂停”)较长 而不是getchar()

一个简单的getchar()就可以了。

如其他答案所示,有很多理由可以避免这种情况。这一切归结为一个原因,使得其余的都没有意义。
System()
函数本质上是不安全的/不受信任的,除非必要,否则不应将其引入程序


对于学生作业,此条件从未满足,因此,如果存在对此方法的调用,我甚至不会运行程序,也会导致作业失败。(这一点从一开始就很清楚。)

这完全是风格的问题。它对调试很有用,但在程序的最终版本中不应使用它。这在内存问题上真的不重要,因为我确信那些发明这个系统(“暂停”)的人都预期它会被经常使用。从另一个角度来看,我们在计算机上使用的任何东西都会限制计算机的内存,而且它不会像动态内存分配那样构成直接威胁,因此我建议将其用于调试代码,而不是其他任何东西。

对于我来说,通常在无理由退出之前等待是没有意义的。一个已经完成工作的程序应该结束,并将其资源交还给它的创建者


一个人也不会在一天工作结束后在黑暗的角落里默默等待,等待有人给他肩膀上的东西。

你可以使用
std::cin.get()
from
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;
}
#包括//std::cout,std::cin
使用名称空间std;
int main(){
做{

cout你不应该使用它的一个原因是:如果你将程序传递到另一台机器上,因为这是一种安全威胁,那么它会激怒Windows上运行的大多数反病毒程序。即使你的程序只包含一个简单的
cout专业人士使用系统(“暂停”);而创建程序的一小部分是为了自己调试它。如果您使用它在每个过程之前、期间和之后获取变量的结果,以确保它们正常工作

在测试并将其与解决方案的其余部分一起全速运行之后,您应该删除这些行。当测试用户定义的算法并确保您按照正确的顺序进行操作以获得所需的结果时,这非常好

决不
system("pause");  
cin.get();
return 0;
cin.ignore();  
cin.get();  
return 0;