Я - совершенно новый студент в программировании арены, таким образом, я не могу схватить эту программу, записанную в моей книге, за которой я следовал в течение нескольких дней. Программа похожа на это:
#include "stdio.h"
main()
{
printf("\a");
}
Что означает эта программа? Эта программа означает, что мы могли услышать звонок? Я не могу услышать, что любой звонок звучит!!!
ASCII-символ 7 - это символ BELL, и он представлен в C как \ a
. Некоторые терминалы издают звуковой сигнал, когда этот символ выводится на терминал; в настоящее время многие этого не делают. (Я смотрю на тебя, Ubuntu.)
Еще в темные времена, когда ASCII был кодифицирован из пепла BAUDOT , терминал был большим фрагментом из железа, который забивал чернила на бумагу, часто включал перфоратор для бумажной ленты и считыватель, а также интерпретировал нажатия клавиш для генерации асинхронного последовательного сигнала со скоростью несколько сотен бод с вращающимися колесами и реле.
На случай, если оператор заснул под успокаивающие звуки, когда он набирал текст, у него был настоящий звонок, в который он мог звонить. Символ, закодированный как 007 в восьмеричном, 0x07 в шестнадцатеричном или как \ a
в символе C или строковой константе, при получении звонил в колокол.
По мере того, как терминалы становились меньше и имели мало движущихся частей или вообще не имели их, физический звонок был заменен звуковым сигналом.
То, что делает ваш эмулятор терминала (также известный как окно консоли в Windows, xterm или что-то подобное в Unix), когда его просят отобразить этот управляющий символ, сегодня недостаточно стандартизирован. Он должен издать шум или мигать в окне, но ваш пробег будет другим.
Взгляните на эту запись в википедии: символ колокольчика :
В языке программирования C (созданном в 1972 году) символ колокольчика может быть помещен в строку или символьная константа с \ a ('a' означает "предупреждение" или "звуковой" и был выбран, потому что \ b уже использовался для возврата на место).
Вы услышите звуковой сигнал из внутреннего динамика вашего ПК (а не из внешних динамиков или наушников, которые вы, возможно, подключили).
\ a
действительно запускает системный звонок. Это escape-последовательность для символа ASCII BEL
.
\ a - это C-представление управляющего символа звукового оповещения («звонок») ASCII. На старом последовательном терминале при выводе этого символа производился звуковой сигнал. Ваш эмулятор терминала может реализовывать или не реализовывать эту функцию.
Попробуйте что-нибудь попроще:
printf("hello\tworld");
printf("hello\nworld");
и посмотрите, что произойдет.
Ваш пример с символом BELL, как указывали другие, вероятно, не будет работать на сегодняшних тостерах ^ 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 сообщает компилятору, что a является идентификатором специального символа и будет хранить его значение char вместо значения char для «а»
.
Управляющая последовательность '\ a'
- это звуковой сигнал звонка, передача этого символа на консоль через print () должна вызывать звуковой сигнал. Некоторые консоли не подают звуковой сигнал.
Вот несколько специальных символов, ссылка взята из справочника c ++, но большинство из них должно быть действительным для c.