如何使用“\a”转义字符产生哔声?

Posted

技术标签:

【中文标题】如何使用“\\a”转义字符产生哔声?【英文标题】:How to produce beep sound using "\a" escape character?如何使用“\a”转义字符产生哔声? 【发布时间】:2010-10-02 12:06:28 【问题描述】:

如果我写下面的程序,那么运行代码时没有哔声。

#include <stdio.h>
int main()
 
    printf("\a");
    return 0;
 

你能告诉我如何使用 C 程序使用 \a 来产生哔声吗?

【问题讨论】:

这取决于终端,这取决于您如何运行程序。如果 stdout 被重定向到文件,则在显示文件之前不会发出蜂鸣声。即便如此,并非所有终端在收到 ascii BEL 字符时都会发出蜂鸣声。如果可以的话,我会禁用它。对于工作中使用的机器,我通常会拔下 PC 内部扬声器的电缆,然后将其余的声音静音,除非我插入了耳机。祝你好运…… 最悲惨的哔哔声是来自笔记本电脑的哔哔声,它们通过“普通”扬声器发出令人难以置信的音量。 顺便说一句,您必须从终端运行程序,因为打印 '\a' 时发出哔哔声是终端功能(不是 C 或 OS 功能)。 @Lie Ryan 我也在终端尝试过,但没有哔声。我在终端上输入了以下命令 printf '\a' 但什么也没发生...... @Parixit:你的操作系统是什么,你使用什么终端程序? 【参考方案1】:

您的程序唯一错误(一半错误)是main 签名。

要 100% 可移植,它应该是 int main(void)int main(int argc, char **argv) 或等效项:int main() 不等效。


我也会打印一个'\n',或者刷新输出缓冲区,而不是依赖运行时自动为我刷新所有缓冲区,但是您的程序应该按原样响起。如果不是问题出在其他地方,而不是C

#include <stdio.h>
int main(void)

    printf("\a\n");
    return 0;

【讨论】:

你至少可以承认 C99 的存在,即使你认为提问者没有使用它;-) 即使在C99 中,int main() 也不等同于已发布的 2 个定义之一。 它在定义中。它不在其他声明中。 6.7.5.3/10 和 /14。它们都表示“无参数”,并且 5.1.2.2.1/1 指定 main 没有参数是可以的。它仅提供了两种方法中的一种作为示例代码,但我不认为这意味着暗示另一种方法是不可接受的。 我阅读标准的方式与您相同,但我的 C89 参考中的文本是相同的。我有一种“直觉”,我们在某个地方遗漏了一些东西……但我现在不想解释标准语。无论如何,无论如何,最好使用 2 个记录定义中的一个 :) 给定int main(void) /* ... */ 递归调用main(42) 是违反约束的。鉴于int main() /* ... */ ,它不是,尽管它确实有未定义的行为。我会说这使它们不等效。另一方面,如果int main() /* ... */ 无效,那么就不可能编写在pre-ANSI 和ANSI C 中都有效的无参数主程序,我敢肯定这不是本意。在实践中,我从未听说过拒绝或以其他方式错误处理 int main() 的 C 编译器——但我仍然更喜欢 int main(void)【参考方案2】:

我通常使用另一种方法来获得在 Windows 7 上 100% 工作的哔声。

    int x=7; //7 is beep sound other numbers may show emoji and characters
    printf("%c",x);

【讨论】:

OP 询问的是 Linux,而不是 Windows。 Char 值 7 在 Scala 中的 Windows 10 上也可以作为蜂鸣器使用(不是主题本身,但很高兴注意到这个有趣的功能仍然支持 W10)。 @absoluteAquarian 抱怨 OP 询问有关 Linux 的问题,但我看不出在哪里指定,因此这篇文章可以作为一般讨论“打印”到控制台的哔哔声。 @GregoryFenn 请参阅 OP 问题中的 cmets。 “我使用的是 Ubuntu 10.04”【参考方案3】:

我同意@Steve Jessop 的观点。人们会竭尽全力让计算机保持安静。

在 Windows 中:作为 "\a" 的替代方案,您可以使用 WinAPI 的 Beep 命令。如果您使用的是 Windows 7,这可能无法按预期工作。

Beep Function (Windows)

【讨论】:

【参考方案4】:

如果您使用的是 Windows,则 Windows 版本发出蜂鸣声的方式非常不同。其中一些启用了该功能并且工作正常,但某些 Windows 版本没有。在某些窗口中,如果您有内部主板扬声器,它就可以工作。但是其他一些窗口,它可以在没有内部主板扬声器的情况下正常工作,直接来自声卡(那太好了!)。

如果你很幸运,并且使用适当的 windows 版本,beep/Beep/printf("\a") 将工作(在内部扬声器上(如果你有的话),或者最好通过声卡)。但是,如果您使用的是其他 Windows 版本,它将无法正常工作。如果在你的电脑上没问题,你朋友/家人的电脑会静音,他/她会认为你写了一个糟糕的程序:-D 但不是。

我的建议是,您应该使用音频库。它很简单,跨平台,并且始终可以在所有计算机等设备上运行。例如,Allegro_v4、Allegro_v5、SDL(简单 DirectMedia 层)或类似的东西。这些库可以很好地与 OpenGL/DirectX 配合使用,并且使用这些库,您可以加载图像、播放视频等。 Native OpenGL / GLUT / DirectX 不能做那样的事情。

【讨论】:

【参考方案5】:

请列出您的操作系统、您是如何运行代码的以及您的计算机是否有蜂鸣器。

如果您使用 Windows,也许这个问答How to make a Beep sound in C on Windows? 会对您有所帮助。

如果您使用 GUI 桌面 Linux 发行版,终端仿真器(如 gnome-terminal 或 xfce4-terminal)有一个偏好选项 bell 可供检查。然后,确保您的扬声器正常工作。

下面的代码很适合我:

/* name: bell.c
 * run: gcc bell.c && ./a.out
 */

#include <stdio.h>

int main(void) 
    printf("\a");
    return 0;

顺便说一句,你的代码不是问题。

【讨论】:

【参考方案6】:
#include<stdio.h>
#include<windows.h>

int main()
   
    Beep(1000, 1000); /* you can use any number starting from 250, but make sure you use                           it both times


    return 0;


【讨论】:

1.仅代码的答案很糟糕; 2. 他在 Linux 上; 3. 他明确地说“使用\a”

以上是关于如何使用“\a”转义字符产生哔声?的主要内容,如果未能解决你的问题,请参考以下文章

python常用转义字符串总结:各种字符转义的不同如何取消转义字符效果?

js,如何防止特殊字符被转义

如何转义 HTML 但不转义字符实体?

如何让在Html中特殊字符不被转义

Java转义字符怎么输出的

转义字符复习总结