C++ 系统(“暂停”)澄清

C++ 系统(“暂停”)澄清,c++,system,onpause,C++,System,Onpause,当我使用systempause时,一行按任意键继续。。。显示在屏幕上 这是一种虹彩,使得读取输出变得相当麻烦 有什么方法可以阻止这种情况发生吗?您的意思是想按任意键继续,但不想在屏幕上显示“按任意键继续”吗?试试这个getchar;这将捕获键盘上输入的一个字符并继续。您的意思是想按任意键继续,但不想在屏幕上显示“按任意键继续”吗?试试这个getchar;这将捕获从键盘输入的一个字符并继续。假设您在Windows上,将系统暂停替换为systempause>NULL。假设您在Windows上,将sy

当我使用systempause时,一行按任意键继续。。。显示在屏幕上

这是一种虹彩,使得读取输出变得相当麻烦


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

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

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

假设您在Windows上,将系统暂停替换为systempause>NULL。

假设您在Windows上,将systempause替换为systempause>NULL。

该行是systempause的一部分。您可以尝试其他方法,例如getlinestd::cin、variable或cin.get。

该行是系统暂停的一部分。您可以尝试不同的方法,例如getlinestd::cin、variable或cin.get。

而不是使用平台相关的systempause,您可以使用平台无关的std::cin.get,如果缓冲区与之冲突,您可以使用:

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

在手动清除缓冲区之前。

您可以使用与平台无关的std::cin.get,而不是使用平台相关的系统暂停。如果缓冲区与之发生冲突,您可以使用:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n')
在手动清除缓冲区之前。

首先,您不应该使用systempause,因为它很危险。您的代码将无缘无故调用外部系统过程;破解程序可以找到一种方法,将暂停命令替换为其他命令,使您的程序使用您的用户权限调用其他程序

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

在Windows上:

暂停>nul

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

在linux上:

按任意键继续。。。;读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的文件,请注意,由于另一个原因,此命令对您不好

此命令模仿原始命令。如果您想避免该消息,只需删除回显压力。。。一部分

奖金:

是否使用系统清除便携式终端屏幕?不,出于同样的原因,不要这样做。这很危险。但出于测试目的,您可以使用: 系统CLS | |清除

避免停顿。C是一种语言,是最强大的语言之一。例如,我确信有一种方法可以仅使用C getchar或scanf进行暂停。

首先,您不应该使用systempause,因为它很危险。您的代码将无缘无故调用外部系统过程;破解程序可以找到一种方法,将暂停命令替换为其他命令,使您的程序使用您的用户权限调用其他程序

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

在Windows上:

暂停>nul

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

在linux上:

按任意键继续。。。;读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的文件,请注意,由于另一个原因,此命令对您不好

此命令模仿原始命令。如果您想避免该消息,只需删除回显压力。。。一部分

奖金:

是否使用系统清除便携式终端屏幕?不,出于同样的原因,不要这样做。这很危险。但出于测试目的,您可以使用: 系统CLS | |清除

避免停顿。C是一种语言,是最强大的语言之一。例如,我确信有一种方法可以仅使用C getchar或scanf进行暂停。

使用

system("pause>nul")
它适用于windows

使用

system("pause>nul")

它适用于windows

改用std::cin.get。改用std::cin.get。谢谢,很高兴知道您也可以将程序的输出传递到windows上的空设备!:谢谢,很高兴知道您也可以将程序的输出传递到windows上的空设备will cin.get直接从没有缓冲区的控制台读取字符吗?will cin.get直接从没有缓冲区的控制台读取字符吗?+1这个答案很简单,也很好
. 我的咆哮只是为了帮助澄清。按照这里的建议使用getchar。+1这个答案很简单,也很好。我的咆哮只是为了帮助澄清。按照这里的建议,使用getchar。嗨,阿尤斯。你回答这个问题太晚了。你能告诉读者你的答案比已经提供的更好吗?嗨,阿尤斯。你回答这个问题太晚了。你能告诉读者你的答案比已经提供的更好吗?