系统(“暂停”)说明

Posted

技术标签:

【中文标题】系统(“暂停”)说明【英文标题】:system("pause") clarification 【发布时间】:2013-02-23 10:08:41 【问题描述】:

当我使用系统(“暂停”)时,屏幕上会出现一行“按任意键继续...”。

这很烦人,并且使读取输出变得非常麻烦。

有什么方法可以阻止这种情况发生吗?

【问题讨论】:

改用std::cin.get() 【参考方案1】:

你的意思是你想按任意键继续,而不是在屏幕上显示“按任意键继续”?试试这个getchar(); 这将捕获从键盘输入的一个字符并继续。

【讨论】:

+1 这个答案很简单也很好。我的下面只是为了帮助“澄清”。按照这里的建议使用getchar()【参考方案2】:

而不是使用平台相关的system("pause"),您可以使用平台无关的std::cin.get(),如果缓冲区搞砸了,您可以使用:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n')

事先清除缓冲区。

【讨论】:

cin.get() 会直接从控制台读取字符而不使用缓冲区吗?【参考方案3】:

假设您使用的是 Windows,请将 system("pause") 替换为 system("pause &gt; NULL")

【讨论】:

谢谢,很高兴知道您也可以将程序的输出传递给 Windows 上的空设备! :)【参考方案4】:

首先,您应该永远不要使用system("pause"),因为它很危险。您的代码将无缘无故地调用外部系统过程;破解者可以找到一种方法将“暂停”命令替换为其他命令,从而使您的程序以您的用户权限调用其他程序。

也就是说,您可以避免将消息发送到null 设备。

在 Windows 上:

暂停>空

如果你想大胆地让这个糟糕的系统调用可移植,你可以使用:

在 Linux 上:

echo 按任意键继续...;读x

现在您可以对两者应用 ORAND(逻辑连接词),并进行适用于两个系统的系统调用:

void pause(void)

    system("echo Press any key to continue . . . && ( read x 2> nul; rm nul || pause > nul )");
    return;

Linux 将创建一个名为“nul”的临时文件,因为它无法识别此关键字。 linux 上的空设备是/dev/null,而不仅仅是nul。之后,该命令将删除这个带有rm nul 的临时文件。因此,如果您碰巧在同一目录中有一个名为 nul 的文件,请注意此命令对您不利(还有另一个原因)。

此命令模仿原始命令。如果您想避免该消息,只需删除其中的echo Pres... 部分即可。


奖金:

使用system 清除便携式终端屏幕? (不,不要出于同样的原因这样做。它很危险。)但出于测试目的,您可以使用:

system("cls||clear");


避免pause。 C 是一种语言,是最强大的语言之一。我确信有一种方法可以只使用 C 来制作 pause(例如 getchar()scanf())。

【讨论】:

【参考方案5】:

该行是system("pause") 的一部分。您可以尝试其他方法,例如getline(std::cin, variable)cin.get()

【讨论】:

【参考方案6】:

使用

system("pause>nul")

它适用于 Windows!

【讨论】:

嗨阿尤什。你回答这个问题很晚。你能告诉读者你的答案比已经提供的更好吗?

以上是关于系统(“暂停”)说明的主要内容,如果未能解决你的问题,请参考以下文章

小程序图像识别功能暂停说明

Linux 暂停命令

Linux系统中暂停正在运行的进程并放入后台

ceph暂停/恢复集群数据同步方法ceph重建日志盘完整流程详细记录sgdisk命令简单说明启动osd命令的两种方法说明

为啥我要启动一个“暂停”的线程?

videojs ios 点击暂停键不起作用?