系统(“暂停”)澄清

时间:2013-02-23 10:08:42

标签: c++ system onpause

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

这是一种模仿,使阅读输出非常麻烦。

有没有办法阻止它的到来?

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

您可以使用平台独立system("pause")而不是使用平台相关std::cin.get(),如果缓冲区正在使用它,您可以使用:

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

事先清除缓冲区。

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

  • 在Windows上:

    暂停&gt; NUL

如果你想大胆地使这个可怕的系统调用便携,你可以使用:

    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上的null设备是/dev/null,而不仅仅是nul。之后,该命令将使用rm nul删除此临时文件。因此,如果您碰巧在同一目录中有一个名为nul的文件,请注意此命令对您不利(另一个原因)。

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

加成:

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

system("cls||clear");

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

答案 5 :(得分:0)

使用

system("pause>nul")

它适用于Windows!