当我使用系统(“暂停”)时,屏幕上会出现一行“按任意键继续...”。
这很烦人,并且使读取输出变得非常麻烦。
有什么办法可以阻止这种情况发生吗?
您的意思是要按任意键继续,但屏幕上不显示“按任意键继续”?试试这个getchar();
,这将捕获从键盘输入的一个字符并继续。
而不是使用平台相关system("pause")
,您可以使用平台独立std::cin.get()
,如果缓冲区弄乱了它,您可以使用:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n')
之前清除缓冲区。
假设您使用的是 Windows,请将system("pause")
.system("pause > NULL")
首先,你不应该使用它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 是一种语言,是最强大的语言之一。我确信有一种方法可以pause
只使用 C(getchar()
或scanf()
例如)。
该行是system("pause")
. 您可以尝试不同的方法,例如getline(std::cin, variable)
或cin.get()
。
采用
system("pause>nul")
它非常适合窗户!