2013-02-23 77 views
1

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

这是无意识的,使读取输出很麻烦。

有什么方法可以阻止它来?

+0

改为使用'std :: cin.get()'。 – Rapptz 2013-02-23 10:10:23

回答

5

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

+0

+1这个答案很简单,非常好。我的轰鸣声只是为了帮助“澄清”。按照这里建议的方式使用'getchar()'。 – 2015-11-30 05:29:49

3

假设您在Windows上,请将system("pause")替换为system("pause > NULL")

+0

谢谢,很高兴知道您可以将程序的输出传递给Windows上的空设备! :) – Wookie88 2013-02-23 10:15:10

0

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

5

而不是使用平台相关system("pause")可以使用独立于平台的std::cin.get(),如果缓冲与它搞乱,你可以使用:

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

手之前清除缓冲区。

+0

将cin.get()直接从控制台读取charachter没有缓冲区? – IcyFlame 2013-02-23 11:57:06

0

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

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

  • 在Windows上:

    暂停> NUL

如果你想大胆地让这个可怕的系统调用随身携带,随处使用:

  • 在linux上:

    echo Pres任何关键要继续......;阅读X

现在你可以将OR(逻辑连接词)同时,使一个系统调用,在这两个系统的工作原理:

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(例如getchar()scanf())来制作pause

0

使用

system("pause>nul") 

它完美的Windows!

+0

嗨Aayush。你很晚才回答这个问题。你能告诉读者你的答案比已经提供的答案好吗? – 2017-05-29 17:09:42