【问题标题】:This program sounds the bell!这个节目敲响了警钟!
【发布时间】:2010-08-11 07:17:58
【问题描述】:

我是编程领域的新学生,所以我无法理解我已经关注了几天的书中写的这个程序。程序是这样的:

#include "stdio.h"

main()
{
 printf("\a");
}

这个程序是什么意思?这个程序是否意味着我们可以听到铃声?我听不到任何铃声!!!

【问题讨论】:

  • 我很确定这在 win7 上不起作用,这取决于平台。我会测试,但这次我什至没有连接我的电脑扬声器:)
  • 我想知道那是什么书,因为这并没有教给你任何有用的东西。可爱,也许......如果它“有效”......它不能保证......
  • Blidi,lolz.. 我的平台是 windows xp。 Polygenelubricants,我正在关注 Herbert Schildt 的“自学 C(第 2 版)”。
  • 你这个可怜的东西。 Schildt 的书通常被认为是最差的书;如果技术错误和虚假的东西,它们是完整的。如果可以的话,我建议您联系better book
  • 当然晚了,但是铃声在 WIN7 上会响起。仅供参考。

标签: c


【解决方案1】:

ASCII 字符 7 是 BELL 字符,它在 C 中表示为 \a。有的终端在终端输出该字符时会发出哔哔声;如今,许多人没有。 (我在看着你,Ubuntu。)

【讨论】:

  • 可能是字符被显示铃声响起,但不是两者兼而有之。对我来说,我只是听到铃声,没有显示任何字符。
  • 在我的情况下,既没有显示字符也没有听到哔哔声......但它被正确编译了
  • “显示”是指“发送到终端”;它不一定会出现在屏幕上。
  • 这就是为什么带有 Windows 的较新计算机具有内置蜂鸣器的原因吗?蜂鸣器只能用于提示错误消息?计算机发出的哔声是“\a”还是其他什么?
  • 对我来说,屏幕闪烁
【解决方案2】:

回到黑暗时代,ASCII 是从 BAUDOT 的灰烬中编纂出来的,terminal 是一大块铁,可以将墨水锤在纸上,通常包括纸带打孔器和阅读器,并解释使用旋转轮和继电器通过击键生成几百波特的异步串行信号。

如果操作员在敲击文本的舒缓声音中睡着了,它有一个可以响的真正铃铛。八进制编码 007、十六进制编码 0x07 或 C 字符或字符串常量中的 \a 编码的字符在收到时会响铃。

随着终端变得更小并且几乎没有移动部件,实体铃声被蜂鸣器取代。

当您的终端仿真器(也称为 Windows 中的控制台窗口、Unix 中的 xterm 或类似的东西)被要求显示该控制字符时,您的终端仿真器会做什么,但目前还没有很好地标准化。它应该发出声音或闪烁窗口,但你的里程会有所不同。

【讨论】:

    【解决方案3】:

    看看这个维基百科条目:bell character:

    在 C 编程语言(创建于 1972 年)中,铃声字符可以用 \a 放置在字符串或字符常量中('a' 代表“警报”或“可听”,之所以选择它是因为 \ b 已用于退格)。

    【讨论】:

    • 在我的情况下,两个扬声器都没有发出哔哔声
    • 它通常使用在 UEFI 存在之前的一些笔记本电脑或 PC 附带的古老的 PC 扬声器(我的意思是,如果 BIOS 无法启动或初始化 BIOS 时出现错误,会发出非常响亮的哔哔声)
    【解决方案4】:

    \a 实际上会触发系统提示音。这是 ASCII BEL 字符的转义序列。

    【讨论】:

      【解决方案5】:

      您会听到 PC 的内置扬声器发出哔声(而不是您可能连接的外置扬声器或耳机)。

      【讨论】:

      • 在我的 windows xp 中,任何一个扬声器都没有发出哔哔声
      • 它不一定是 PC 扬声器。这完全取决于终端、操作系统、系统等。
      【解决方案6】:

      字符串可以包含处理方式与所有其他字符不同的字符。最常用的一个是'\n''\n' 字符不会在控制台中打印字符,而是告诉控制台开始一个新行。此类特殊字符被称为不可打印,因为它们在 c 中没有自己的可见表示,因此必须使用转义序列。

      在转义序列"\a" 中,a 前面的反斜杠告诉编译器 a 是特殊字符的标识符,并将存储其 char 值而不是 'a' 的 char 值。

      '\a' 转义序列是可听见的铃声字符,通过 print() 将此字符提供给控制台应该会发出哔声。有些控制台不会发出哔哔声。

      这里有 some 特殊字符,链接来自 c++ 参考,但大多数应该对 c 有效。

      【讨论】:

        【解决方案7】:

        \a 是 ASCII 声音警报(“铃”)控制字符的 C 表示形式。 在老式串行终端上,输出该字符会产生“哔”声。您的终端模拟器可能会也可能不会实现此功能。

        【讨论】:

          【解决方案8】:

          除了你得到的所有答案之外,还要考虑到你的程序可能无法编译。这是固定版本:

          #include <stdio.h>
          #include <stdlib.h>
          
          int main()
          {
              printf("\a");
              return EXIT_SUCCESS;
          }
          

          最重要的变化是系统标题必须用 包围,而不是引号。另外,最好知道 main() 函数总是返回一个 int(给操作系统),并且这个 int 在头文件 stdlib.h 中被编码为两个常量,EXIT_SUCCESS 和 EXIT_FAILURE

          【讨论】:

          • 考虑其他答案。 BEL 字符可能会或可能不会在您的系统中敲响警钟。更改 "printf("\a");"与“ printf(“你好,世界”);“如果屏幕上出现消息“Hello, world”,则您的终端不支持 BEL 字符。
          • 我已经按照上面的源代码测试了该程序,它可以在 Windows 7 上运行,使用 mingw' gcc。
          • @Baltasarq 这不仅取决于 Windows 7,还取决于您使用的终端。我假设“它适用于 Windows 7”是指“它适用于 Windows 7 中的 cmd.exe”,但它可能不适用于 Console 2
          • 您的代码包含三个更改,但只有其中一个是绝对必要的。 “系统头文件必须用 括起来,而不是引号” 包含路径是实现定义的,主要编译器可以轻松找到用引号括起来的系统头文件。将&lt;&gt; 用于系统标头被认为是一种很好的做法,但must 听起来太强了。 “main() 函数总是返回一个 int” 从 C99 开始,隐式 int 规则被移除,因此声明返回类型是强制性的,但 main 函数有一个特殊规则,如果控制到达结束。
          【解决方案9】:

          尝试一些更简单的东西:

          printf("hello\tworld");
          printf("hello\nworld");
          

          看看会发生什么。

          正如其他人指出的那样,您使用 BELL char 的示例可能不适用于今天的烤面包机^H^H^H^H^H^H^H^H 计算机;大多数终端重定向“钟”字符以被丢弃或短暂闪烁终端。

          相信我,你想在夜间编码会议上保持这种状态:)

          【讨论】:

            【解决方案10】:

            上面你写的程序我已经用GNU GCC编译器在代码块中试过了..

            一切正常……

            如果您想听到哔声,您可以尝试另一种方式,它只会在 Windows 中有用!

            #include<stdio.h>
            #include<windows.h>
            main()
            {
               Beep(600,600); /* you have to enter both the values whatever you want
            }
            

            【讨论】:

              【解决方案11】:

              有趣的是,这似乎适用于所有没有 wWinMain 或 WinMain 入口点的构建。 wprintf(L"\a") 对于 Unicode 构建听起来不错。 (此处为赢 7)。

              PC 扬声器过去依赖于“speaker.drv”,但这个小美已经被带走了一段时间,取而代之的是 beep.sys,现在移到了user mode system sounds agent

              还讨论了从命令提示符启用和禁用扬声器here

              【讨论】:

                【解决方案12】:
                #include<stdio.h>
                int main()
                {
                
                    int i = 263;
                    putchar(i);  // or you can directly use putchar(263);
                    return 0;
                }
                

                当您在输出屏幕上时,此程序会发出铃声

                【讨论】:

                  【解决方案13】:

                  问题不在于您的 C 程序是否编译它完全取决于您的终端设置,通常它们会在 UEFI 存在之前使用笔记本电脑和 PC 附带的 PC 扬声器发出哔哔声

                  https://en.wikipedia.org/wiki/PC_speaker

                  我使用 2 台笔记本电脑对其进行了测试,其中一台是在 UEFI 之前购买的,另一台是在 UEFI 普及之后购买的

                  我在两个测试中运行echo -e '\a'(两个linux系统都加载了pcspkr模块)并确保在UEFI存在之前的笔记本电脑是哔哔其他笔记本电脑只是静默

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-08-19
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-12-23
                    • 2010-11-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多