Ответ 1
Символ ASCII 7 является символом BELL, и он представлен в C как \a
. Некоторые терминалы выдают звуковой сигнал, когда этот символ выводится на терминал; в настоящее время многие этого не делают. (Я смотрю на тебя, Убунту.)
Я совершенно новый студент в области программирования, поэтому я не могу понять эту программу, написанную в моей книге, что я слежу за несколькими днями. Программа такова:
#include "stdio.h"
main()
{
printf("\a");
}
Что означает эта программа? Означает ли эта программа, что мы могли услышать звонкий звонок? Я не слышу звонкого звонка!
Символ ASCII 7 является символом BELL, и он представлен в C как \a
. Некоторые терминалы выдают звуковой сигнал, когда этот символ выводится на терминал; в настоящее время многие этого не делают. (Я смотрю на тебя, Убунту.)
Назад в темные времена, когда ASCII был кодифицирован из пепла BAUDOT, терминал был большим куском железа, который забил чернила на бумаге, часто включал бумажный пунш и считыватель, и интерпретировал нажатия клавиш для генерации асинхронного последовательного сигнала на несколько сотен бод с вращающимися колесами и реле.
В случае, если оператор засыпает успокаивающим шумом, из которого он выбивает текст, у него был настоящий звонок, который он мог бы звонить. Символ, закодированный 007 в восьмеричном, 0x07 в шестнадцатеричном формате или как \a
в символе C или строковой константе, запустил звонок при получении.
Поскольку терминалы стали меньше и реализованы с небольшими или отсутствующими движущимися частями, физический звонок был заменен звуковым сигналом.
Именно то, что ваш эмулятор терминала (например, консольное окно в Windows, xterm или что-то подобное в Unix) делает, когда ему предлагается отобразить, что контрольный символ сегодня не стандартизирован. Это должно сделать шум или вспышка окна, но ваш пробег будет меняться.
Взгляните на эту запись в википедии: символ колокола:
На языке программирования C (созданный в 1972 году) символ колокола может быть помещен в строку или символьную константу с \a ('a' означает "alert" или "audible" и был выбран, потому что \b уже был используется для backspace).
Вы услышите звуковой сигнал со своего внутреннего громкоговорителя (не внешние громкоговорители или наушники, которые вы, возможно, подключили).
\a
фактически вызывает системный звонок. Это escape-последовательность для символа ASCII BEL
.
\ a - представление C символа управления звуковым предупреждением ASCII ( "звонок" ). На последовательном терминале старой школы вывод этого персонажа произвел звуковой сигнал. Эмулятор терминала может или не может выполнять эту функцию.
Попробуйте что-то более простое:
printf("hello\tworld");
printf("hello\nworld");
и посмотрим, что произойдет.
Ваш пример с BELL char, как указывали другие, вероятно, сегодня не будет работать на тостерах H ^ H ^ H ^ H ^ H ^ H ^ H ^ H компьютеров; большинство терминалов перенаправляют символ "звонок", чтобы либо отменить, либо кратковременно мигнуть терминал.
И поверьте мне, вы хотите сохранить его таким образом для сеансов ночного кодирования:)
Помимо всех полученных ответов, учтите, что ваша программа, вероятно, не скомпилируется. Вот исправленная версия:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("\a");
return EXIT_SUCCESS;
}
Самое важное изменение заключается в том, что заголовки систем должны быть обработаны с помощью < и > вместо кавычек. Кроме того, лучше знать, что функция main() всегда возвращает int (в операционную систему) и что этот int кодируется в двух константах: EXIT_SUCCESS и EXIT_FAILURE, в заголовке stdlib.h
Строки могут содержать символы, которые обрабатываются, отличные от всех других символов. Наиболее часто используемым является '\n'
. Символ '\n'
не печатает символ в консоли, а указывает консоли на запуск новой строки. Такие специальные символы называются непечатаемыми, поскольку они не имеют собственного видимого представления в c и вместо этого должны использовать escape-последовательности.
В escape-последовательности "\a"
обратная косая черта перед а сообщает компилятору, что a является идентификатором для специального символа и сохраняет его char -значение вместо char -значения 'a'
.
Управляющая последовательность '\a'
- это звуковой символ колокола, передающий этот символ на консоль с помощью print(), который должен вызывать звуковой сигнал. Некоторые консоли не подают звуковой сигнал.
Вот некоторые специальные символы, ссылка взята из ссылки С++, но большинство из них должны быть действительны для c.
Вышеупомянутая программа, которую вы написали, я попробовал ее в блоках кода с использованием компилятора GNU GCC..
Он отлично работал.
Если вы хотите услышать звуковой сигнал, вы можете попробовать его по-другому, он будет полезен только в окнах!
#include<stdio.h>
#include<windows.h>
main()
{
Beep(600,600) /* you have to enter both the values whatever you want
}
Интересно, что это работает во всех сборках, у которых нет точки входа wWinMain или WinMain. wprintf(L"\a")
звучит отлично для Unicode-сборок. (Win 7 здесь).
Динамик ПК, используемый для зависимости от "speaker.drv", но эта маленькая красота была отнята некоторое время назад и заменена на beep.sys, который теперь перемещен в пользовательский режим звукового агента.
Включение и отключение динамика из командной строки также обсуждается здесь.