Эта программа звучит как колокол! - PullRequest
32 голосов
/ 11 августа 2010

Я совершенно новый студент в области программирования, поэтому я не могу понять эту программу, написанную в моей книге, которой я следил в течение нескольких дней.Программа выглядит так:

#include "stdio.h"

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

Что означает эта программа?Означает ли эта программа, что мы могли слышать звон?Я не слышу звона звонка !!!

Ответы [ 12 ]

48 голосов
/ 11 августа 2010

ASCII символ 7 является символом BELL, и он представлен в C как \aНекоторые терминалы издают звуковой сигнал, когда этот символ выводится на терминал;в наше время многие этого не делают.(Я смотрю на тебя, Ubuntu.)

20 голосов
/ 11 августа 2010

Назад в темные века, когда ASCII был записан из пепла BAUDOT , терминал представлял собой большой кусок железа, который вбивал чернила в бумагу часто включал в себя перфоратор и считыватель бумажной ленты и интерпретировал нажатия клавиш для генерации асинхронного последовательного сигнала со скоростью несколько сотен бод с вращающимися колесами и реле.

В случае, если оператор заснул под успокаивающие звуки, издающие текст, у него был настоящий звонок, который он мог бы зазвонить. Символ, закодированный как 007 в восьмеричном, 0x07 в шестнадцатеричном или как \a в символе C или строковой константе, звонил в колокол при получении.

По мере того как терминалы становились меньше и имели мало движущихся частей или не имели их, физический звонок был заменен звуковым сигналом.

Именно то, что делает ваш эмулятор терминала (так называемое консольное окно в Windows, xterm или что-то подобное в Unix), когда его просят показать, что управляющий символ сегодня недостаточно хорошо стандартизирован. Он должен шуметь или мигать окном, но ваш пробег будет отличаться.

10 голосов
/ 11 августа 2010

Посмотрите на эту запись в Википедии: символ колокола :

На языке программирования C (создан в 1972 году) символ колокола можно поместить в строкусимвольная константа с \ a («a» обозначает «оповещение» или «слышимый» и была выбрана, потому что \ b уже использовалось для возврата).

6 голосов
/ 11 августа 2010

Вы услышите звуковой сигнал из внутреннего динамика вашего компьютера (не из внешних динамиков или наушников, которые вы, возможно, подключили).

5 голосов
/ 11 августа 2010

\a фактически вызывает системный перезвон. Это escape-последовательность для символа ASCII BEL.

3 голосов
/ 11 августа 2010

Помимо всех полученных ответов, учтите, что ваша программа, вероятно, не будет компилироваться. Вот исправленная версия:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("\a");
    return EXIT_SUCCESS;
}

Наиболее важным изменением является то, что системные заголовки должны быть заключены в <и> вместо кавычек. Кроме того, лучше знать, что функция main () всегда возвращает int (в операционную систему) и что этот int кодируется в двух константах EXIT_SUCCESS и EXIT_FAILURE в заголовке stdlib.h

2 голосов
/ 12 августа 2010

Строки могут содержать символы, которые обрабатываются не так, как все остальные символы. Наиболее часто используемый - это '\n'. Символ '\n' не печатает символ в консоли, вместо этого он указывает консоли начать новую строку. Такие специальные символы называются непечатаемыми, поскольку они не имеют собственного видимого представления в c и вместо них должны использовать escape-последовательности.

В escape-последовательности "\a" обратная косая черта перед a сообщает компилятору, что a является идентификатором специального символа и будет хранить его значение char вместо значения char * значение 'a'.

Экранирующая последовательность '\a' - это символ слышимого звонка, передача этого символа на консоль с помощью print () должна вызывать звуковой сигнал. Некоторые консоли не издают звуковых сигналов.

Вот некоторые специальные символы, ссылка взята из ссылки на c ++, но большинство должно быть допустимо для c.

2 голосов
/ 11 августа 2010

Попробуйте что-нибудь попроще:

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

и посмотрите, что получится.

Ваш пример с символом BELL, как отмечали другие, вероятно, не будет работать на современных тостерах ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H;большинство терминалов перенаправляют символ «колокольчик» либо на сброс, либо на короткое мигание терминала.

И, поверьте мне, вы хотите, чтобы это было так для ночных сессий:)

2 голосов
/ 11 августа 2010

\ a - представление C управляющего символа звукового оповещения ASCII («колокольчик»).На серийном терминале старой школы, вывод этого персонажа производил звуковой сигнал.Ваш эмулятор терминала может реализовывать или не реализовывать эту функцию.

1 голос
/ 13 декабря 2014

Программа, которую вы написали выше, я попробовал ее в блоках кода с помощью компилятора GNU GCC ..

Все работало нормально.

Если вы хотите услышать звуковой сигналВы можете попробовать это по-другому, это будет полезно только в Windows!

#include<stdio.h>
#include<windows.h>
main()
{
   Beep(600,600); /* you have to enter both the values whatever you want
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...