将\ a放在输出流上不会产生声音

时间:2010-09-06 21:44:21

标签: c++ c

这是由一些C / C ++实验引起的;声明

printf("\a");

也不是声明

cout << "\a";

发出可听见的铃声。它应该如何发挥作用。 。

5 个答案:

答案 0 :(得分:8)

尽管ASCII BEL控制字符具有明确定义的含义,但它在控制台中的精确解释依赖于高度平台。 C将\a定义为在代码7中找到的ASCII BEL字符的转义序列,有时也称为Ctrl + G.在过去的好时光中,这个控制代码允许远程终端的铃声响起,以警告远程操作员需要注意的消息。

在现代系统中,铃声已基本上被其他机制所取代。您的控制台窗口(无论是* nix上的xterm或类似版本,还是Windows上的控制台Windows)现在都有责任使用该控制字符执行“合理”操作。它也可以完全忽略它。

在Windows上,您可以致电MessageBeep(),通过0xffffffff获取一个不使用系统资源的简单哔声,MB_OK或其他MB_ICON*来发出声音警报常数以获得系统事件之一。

答案 1 :(得分:2)

要感恩。我想你还没有不幸尝试在繁忙的办公室里显示二进制文件的列表。

答案 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选项)来播放。输入man aplay作为其手册。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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