【问题标题】:Using System("pause") when Command Arguments have been set to a data file将命令参数设置为数据文件时使用 System("pause")
【发布时间】:2017-06-02 07:08:25
【问题描述】:

我目前正在为一个类编写一个非常简单的程序,并且很快意识到我从来不知道 System("pause") 命令在做什么。

程序提示要求我将命令参数(位于 Visual Studio 2013 中的 Debug->Properties->Configuration Properties->Debugging 中)设置为输入文件,以便我可以使用“cin”从文件中读取”。但是,在设置此属性后,我注意到熟悉的 System("pause") 命令不再用于保持控制台窗口打开。 (我将属性改回默认值,它又可以工作了,所以这似乎是问题所在。)

有什么解释吗?我真的很好奇 System("pause") 现在在后台到底在做什么。

【问题讨论】:

  • 您的程序是否具有交互性?如果它是交互式的,它如何与这种重定向一起工作?如果不是,为什么要等待按键被击中?听起来你故意破坏你的程序,让它做你莫名其妙地配置你的IDE 做的事情,而不考虑声音设计原则。 (可悲的是,许多课程都教坏习惯。这是一种常见的习惯。)
  • 您不应该使用system("pause") 来保持窗口打开。它始终是垃圾质量代码的标志。如果您在 Visual Studio IDE 下运行,请将项目属性中的“子系统”设置为“CONSOLE”,窗口将自行保持打开状态(在没有调试器的情况下运行)。
  • @DavidSchwartz 该命令只是用于暂停程序以进行调试,以便我可以看到程序的输出。我已经阅读了您在下面提供的链接以回应另一个答案。我可以通过使用断点来解决这个问题。
  • @AustinC 如果您希望窗口保持打开状态,为什么不告诉打开它的东西,以及关闭它的东西,而不是关闭它? (你被教过使用system("pause")吗?如果是这样,老实说,如果可能的话,找一个不同的导师。这是一个巨大的警告信号,表明导师根本不了解C的角色或 C++ 程序,或如何考虑设计一个适合合理范围的程序。)
  • @DavidSchwartz 我被教导使用它进行调试,是的。我很想知道推荐什么其他方式,因为我没有按照你的建议。你说的是打开和关闭它,我将如何操作这些过程?

标签: c++ c commandargument


【解决方案1】:

Windows 上的system 函数启动cmd.exe 的实例并要求它执行您传递的命令,在本例中为pause。通常cmd.exe 会等待用户按键。换句话说,它从标准输入设备中读取一个字符,并在读取后立即返回。好吧,你给了它一个文件作为标准输入设备,所以它从那个文件中读取一个字符并立即返回。

它正在做你要求它做的事情。背景中没有什么神秘的事情发生。

您只需在命令行中输入pause < foo 即可轻松演示这一点,其中foo 是任何文件。在这种情况下,您会看到 pause 立即返回。

正如 David Schwartz 在 cmets 中指出的那样,使用 system("pause")horrible practice。如果您需要等待用户输入继续,请通过一对简单的 coutcin 调用自行完成。

【讨论】:

  • 这很有趣。您认为在这种情况下我将如何复制 System("pause") 的效果?或者有可能吗?
  • 当然,为什么要使用system?只需向cout 写一条消息,告诉用户按回车键,然后从cin 读取。
  • 你真的不应该。使用system("pause")horrible practice
  • @AustinC 我同意大卫·施瓦茨的观点。
  • @CareyGregory 我同意。我仅将此命令用于调试目的。我已经阅读了 David Schwartz 提供的链接,并决定尝试使用断点解决方案来解决这个问题,并且成功了。不幸的是,cin 和 cout 技巧不起作用,因为 cin 似乎只是从文件中读取并继续其快乐的方式。无论如何,感谢你们两位的有用回答。
猜你喜欢
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 2011-12-18
  • 2012-08-21
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多