Как создать звуковой сигнал, используя escape-символ «\ a»?

Если я напишу следующую программу, то при запуске кода не будет звукового сигнала.

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

Можете ли вы сказать мне, как использовать\a для получения звукового сигнала с помощью программы C?

 Matteo Italia02 окт. 2010 г., 14:10
Самые трагические гудки - это то, что слышно с ноутбуков, и они излучают невероятную громкость через «нормальные» динамики.
 Steve Jessop02 окт. 2010 г., 14:09
Это зависит от терминала, который зависит от того, как вы запускаете программу. Если стандартный вывод перенаправлен в файл, то пока вы не отобразите файл, никаких звуковых сигналов не будет. Тем не менее, не все терминалы на самом деле издают звуковой сигнал, когда получают символ ascii BEL. Я, например, отключить его, если смогу. В связи с этим на машинах, используемых на работе, я обычно отсоединяю кабель от внутреннего динамика ПК и отключаю остальную часть звука, кроме случаев, когда у меня подключены наушники. Удачи, получая звуковой сигнал от этого ...
 Parikshita02 окт. 2010 г., 16:41
@ Ли Райан Я также попробовал это в терминале, но без звукового сигнала. Я набрал следующую команду printf '\ a' на терминале, но ничего не произошло ...
 Lie Ryan02 окт. 2010 г., 17:54
@Parixit: какая у вас операционная система и какую программу терминала вы используете?
 Gilbert13 июн. 2016 г., 03:13
Чтобы избежать проблем с printf (), измените вашу программу, попробуйте выполнить следующие замены: #include <unistd.h> write (1, "\ a", 1); который также должен быть запущен в терминале.
 Lie Ryan02 окт. 2010 г., 14:51
кстати, тыдолжен Запустите программу из терминала, так как звуковой сигнал при печати '\ a' является функцией терминала (не функцией C или ОС).
 Parikshita03 окт. 2010 г., 12:10
@Lie Ryan Я использую Ubuntu 10.04

Ответы на вопрос(6)

он работает на 100% на Windows 7.

    int x=7; //7 is beep sound other numbers may show emoji and characters
    printf("%c",x);
 Tau02 окт. 2018 г., 18:37
ОП спрашивал о Linux, а не о Windows.

Windows-версии делают звуковой сигнал совершенно по-разному. Некоторые из них позволяют это и работают нормально, но некоторые версии Windows этого не делают. В некоторых окнах это работает именно в этом случае, если у вас есть встроенный динамик материнской платы. Но некоторые другие окна работают без встроенного динамика материнской платы, напрямую со звуковой карты (это было бы неплохо!).

Если вам повезет, и вы используете соответствующую версию Windows, beep / Beep / printf ("\ a") будет работать (на внутреннем динамике (если есть) или в лучшем случае через звуковую карту). Но если вы используете другую версию Windows, она не будет работать. Если на вашем компьютере все в порядке, компьютер вашего друга / члена семьи будет молчать, и он / она будет думать, что вы написали плохую программу :-D, но нет.

Мой совет, что вы должны использовать библиотеку для аудио. Это простой, кроссплатформенный, и он будет работать всегда все время на всех компьютерах и т. Д. Например, Allegro_v4, Allegro_v5, SDL (Simple DirectMedia Layer) или что-то в этом роде. Эти библиотеки прекрасно работают с OpenGL / DirectX, и с этими библиотеками вы можете загружать изображения, воспроизводить видео и тому подобное. Родной OpenGL / GLUT / DirectX не может делать такие вещи.

наполовину неправильно) с вашей программой есть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;
}
 Yousha Aleayoub19 мар. 2018 г., 11:17
Или дажеchar beep = '\007';
 Steve Jessop02 окт. 2010 г., 16:40
Это в определении. Это не в других декларациях. 6.7.5.3/10 и / 14. Они оба означают «нет параметров», а 5.1.2.2.1 / 1 указывает, чтоmain без параметров в порядке. Это дает только один из двух способов сделать это в качестве примера кода, но я несчитать это означает, что другой способ сделать это недопустим.
 Steve Jessop02 окт. 2010 г., 14:42
Вы могли бы по крайней мере признать, что C99 существует, даже если вы думаете, что спрашивающий не использует его ;-)
 pmg02 окт. 2010 г., 17:14
Я читаю «Стандарт» так же, как и вы, но текст в моей ссылке на С89 такой же. У меня "внутреннее чувство", мы кое-что упускаем ... но сейчас мне не хочется толковать стандарт В любом случае, лучше использовать одно из 2 задокументированных определений, несмотря ни на что :)
 Keith Thompson03 мая 2013 г., 19:20
Даноint main(void) { /* ... */ } рекурсивный вызовmain(42) является нарушением ограничения. Даноint main() { /* ... */ }это не так, хотя у него есть неопределенное поведение. Я бы сказал, что это делает их не эквивалентными. С другой стороны, еслиint main() { /* ... */ } неверно, то невозможно написать основную программу без параметров, которая бы действовала как на pre-ANSI, так и на ANSI C, что, я уверен, не было целью. На практике я никогда не слышал о компиляторе C, который отвергает или неправильно обрабатываетint main() - но я все еще предпочитаюint main(void).
 pmg02 окт. 2010 г., 15:34
Даже вC99, int main() не эквивалентно одному из 2 опубликованных определений.

чтобы держать свои компьютеры в покое.

В Windows: в качестве альтернативы "\ a", вы можете использовать команду звукового сигнала WinAPI. Если вы используете Windows 7, это может работать не так, как ожидалось.

Функция звукового сигнала (Windows)

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

Если вы используете Windows, возможно, это Q & AКак сделать звуковой сигнал в C на Windows? помог бы тебе.

Если вы используете настольный дистрибутив Linux с графическим интерфейсом, у эмулятора терминала, такого как gnome-терминал или xfce4-терминал, есть опция предпочтения для проверки. Затем убедитесь, что ваш динамик работает.

Код ниже хорошо работает для меня:

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

#include <stdio.h>

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

Кстати, ваш код не проблема.

#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;

}
 Kevin03 мая 2013 г., 17:59
1. Ответы только на код плохие; 2. Он на Linux; 3. Он явно говорит «используя \ a»

Ваш ответ на вопрос