2010-09-06 73 views
2

这是由一些使用C/C++进行的实验提示的;既没有声明将 a放在输出流上不会产生声音

printf("\a"); 

也不声明

cout << "\a"; 

产生可听铃声。 \应该如何运作。 。 。

+3

电脑不再有铃声了。打开你的扬声器。 – 2010-09-06 21:48:39

+0

这是上个世纪的把戏:) – Andrey 2010-09-06 21:52:34

+0

@Andrey,我相信它可以回到那个世纪之前... – RBerteig 2010-09-06 21:58:23

回答

7

尽管ASCII BEL控制字符具有明确的含义,但它在控制台中的确切解释与平台高度相关。 C定义了\a作为在代码7找到的ASCII BEL字符的转义序列,有时也被称为Ctrl + G。在过去的好日子里,这个控制代码允许远程终端的响铃提醒远程操作员需要注意的消息。

在现代系统中,铃已经在很大程度上被其他机制所取代。您的控制台窗口(无论xterm或类似的* nix或Windows上的控制台Windows)现在都有责任对该控制字符进行“明智的”操作。它也有完全忽略它的自由。

在Windows上,你可以通过调用MessageBeep()实现声音警报,通过0xffffffff吃出不使用的系统资源,MB_OK或其他MB_ICON*不断获得的系统事件声音一个简单的蜂鸣声。

2

感恩。我想你一直都不敢尝试在繁忙的办公室显示二进制文件的列表。

0

您可以访问到aplay实用程序(GNU/Linux等):

#include <cstdlib> 

int main(int argc, char* argv[]) 
{ 
    system("yes \"ZaaZa\" | aplay -c 2"); // stop this with ctrl-c 
} 

您可以发送任何原始声音(或有一些编码,看到-f选项)aplay。在手册中输入man aplay

0

我会看看你的控制台的配置。我不知道Windows如何处理它,但在Linux上,控制台可以配置为忽略系统铃声,或者在其位置播放自定义声音。在尝试更复杂的解决方案(如aplay)之前,我会尝试将控制台配置作为第一步。

0

分配给STDOUT的终端软件决定如何处理\a字符。您可以尝试使用其他终端软件。或深入了解终端的设置。也许有一个开关来启用/禁用铃声。