2

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

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

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

4

6 回答 6

6

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

于 2013-02-23T10:11:24.713 回答
5

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

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

之前清除缓冲区。

于 2013-02-23T10:13:08.743 回答
3

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

于 2013-02-23T10:11:32.537 回答
1

首先,你不应该使用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 是一种语言,是最强大的语言之一。我确信有一种方法可以pause只使用 C(getchar()scanf()例如)。

于 2015-11-30T05:22:17.917 回答
0

该行是system("pause"). 您可以尝试不同的方法,例如getline(std::cin, variable)cin.get()

于 2013-02-23T10:13:08.187 回答
0

采用

system("pause>nul")

它非常适合窗户!

于 2017-05-29T16:43:50.317 回答