当我使用系统(“暂停”)时,屏幕上会出现一行“按任意键继续......”。
这是一种模仿,使阅读输出非常麻烦。
有没有办法阻止它的到来?
答案 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
如果你想大胆地使这个可怕的系统调用便携,你可以使用:
:
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 {pause
或getchar()
来制作scanf()
。
答案 5 :(得分:0)
使用
system("pause>nul")
它适用于Windows!