系统(“暂停”)说明
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 > NULL")
。
【讨论】:
谢谢,很高兴知道您也可以将程序的输出传递给 Windows 上的空设备! :)【参考方案4】:首先,您应该永远不要使用system("pause")
,因为它很危险。您的代码将无缘无故地调用外部系统过程;破解者可以找到一种方法将“暂停”命令替换为其他命令,从而使您的程序以您的用户权限调用其他程序。
也就是说,您可以避免将消息发送到null
设备。
在 Windows 上:
暂停>空
如果你想大胆地让这个糟糕的系统调用可移植,你可以使用:
在 Linux 上:
echo 按任意键继续...;读x
现在您可以对两者应用 OR 和 AND(逻辑连接词),并进行适用于两个系统的系统调用:
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!
【讨论】:
嗨阿尤什。你回答这个问题很晚。你能告诉读者你的答案比已经提供的更好吗?以上是关于系统(“暂停”)说明的主要内容,如果未能解决你的问题,请参考以下文章
ceph暂停/恢复集群数据同步方法ceph重建日志盘完整流程详细记录sgdisk命令简单说明启动osd命令的两种方法说明