15 Stimmen

Wie kann man einen Piepton mit dem Escape-Zeichen "\a" erzeugen?

Wenn ich das folgende Programm schreibe, gibt es keinen Piepton beim Ausführen des Codes.

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

Kannst du mir sagen, wie man \a verwendet, um mit einem C-Programm einen Piepton zu erzeugen?

4 Stimmen

Das hängt vom Terminal ab, das davon abhängt, wie du das Programm ausführst. Wenn stdout auf eine Datei umgeleitet wird, gibt es keinen Ton, bis du die Datei anzeigst. Dennoch piepen nicht alle Terminals tatsächlich, wenn sie ein ASCII-BEL-Zeichen empfangen. Ich deaktiviere es persönlich, wenn ich kann. In der Tat ziehe ich auf Maschinen, die bei der Arbeit verwendet werden, normalerweise das Kabel zum PC-Lautsprecher ab und stelle den Rest des Tons stumm, außer wenn ich Kopfhörer eingesteckt habe. Viel Glück dabei, einen Ton aus dieser Konfiguration zu bekommen...

1 Stimmen

Die tragischsten Pieptöne sind diejenigen von Laptops, die in unvorstellbarer Lautstärke über die "normalen" Lautsprecher ausgegeben werden.

3 Stimmen

Übrigens, du musst das Programm von einem Terminal ausführen, da das Piepen beim Drucken von '\a' ein Terminal-Feature ist (nicht C- noch OS-Feature).

2voto

pmg Punkte 102904

Das einzige falsche (halb falsch) an Ihrem Programm ist die main-Signatur.

Um zu 100% portabel zu sein, sollte es int main(void) oder int main(int argc, char **argv) oder äquivalent sein: int main() ist nicht äquivalent.


Und ich würde auch ein '\n' drucken oder den Ausgabepuffer leeren, anstatt darauf zu vertrauen, dass alle Puffer automatisch vom Programm ausgegeben werden, aber Ihr Programm sollte den Alarmton ausgeben. Wenn es das nicht tut, liegt das Problem woanders und nicht an C.

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

0 Stimmen

Du könntest zumindest zugeben, dass C99 existiert, auch wenn du denkst, dass der Fragesteller es nicht verwendet ;-)

0 Stimmen

Selbst in C99 ist int main() nicht gleichwertig mit einer der beiden veröffentlichten Definitionen.

0 Stimmen

Es ist in einer Definition. Es ist nicht in anderen Deklarationen. 6.7.5.3/10 und /14. Sie bedeuten beide "keine Parameter", und 5.1.2.2.1/1 gibt an, dass main ohne Parameter in Ordnung ist. Es gibt nur eine der beiden Möglichkeiten als Beispielcode an, aber ich denke nicht, dass damit impliziert werden soll, dass die andere Art es zu tun inakzeptabel ist.

2voto

user332422 Punkte 41

Ich benutze normalerweise einen anderen Weg, um den Piepton zu erhalten. Es funktioniert zu 100 % auf Windows 7.

    int x=7; //7 ist der Piepton, andere Zahlen können Emoji und Zeichen zeigen
    printf("%c",x);

0 Stimmen

OP fragte nach Linux, nicht nach Windows.

0 Stimmen

Die Zeichenwerte von 7 funktionieren auch unter Windows 10 in Scala als Summer (nicht direkt zum Thema, aber es ist gut zu beachten, dass diese lustige Funktion immer noch von W10 unterstützt wird). @absoluteAquarian beschwerte sich darüber, dass der OP nach Linux fragte, aber ich sehe nicht, wo das spezifiziert wurde, und daher kann dieser Beitrag eine allgemeine Diskussion über das Erzeugen von Pieptönen auf der Konsole sein.

0 Stimmen

@GregoryFenn sieh dir die Kommentare in der Frage des OPs an. "Ich benutze Ubuntu 10.04"

1voto

Edward Leno Punkte 6139

Ich stimme @Steve Jessop zu. Menschen werden große Anstrengungen unternehmen, um ihre Computer leise zu halten.

In Windows: Als Alternative zu "\a" könnten Sie den Beep-Befehl von WinAPI verwenden. Wenn Sie Windows 7 verwenden, könnte dies nicht wie erwartet funktionieren.

Beep-Funktion (Windows)

0voto

user2654137 Punkte 17

Wenn Sie Windows verwenden, machen die Windows-Versionen auf sehr unterschiedliche Weise ein Piepen. Einige von ihnen aktivieren das und funktionieren gut, aber einige Windows-Versionen nicht. In einigen Windows-Versionen funktioniert es nur in dem Fall, wenn Sie einen internen Motherboard-Lautsprecher haben. Aber in einigen anderen Windows-Versionen funktioniert es gut ohne internen Motherboard-Lautsprecher, direkt von der Soundkarte (das wäre schön!).

Wenn Sie Glück haben und die passende Windows-Version verwenden, wird das Piepen / Beep / printf("\a") funktionieren (auf dem internen Lautsprecher (falls vorhanden) oder bestenfalls über die Soundkarte). Aber wenn Sie eine andere Windows-Version verwenden, wird es nicht funktionieren. Wenn es auf Ihrem Computer in Ordnung ist, wird der PC Ihres Freundes / Familienmitglieds still sein, und er oder sie wird denken, dass Sie ein schlechtes Programm geschrieben haben :-D aber nicht.

Mein Rat ist, dass Sie eine Bibliothek für Audio verwenden sollten. Es ist einfach, plattformübergreifend und es wird immer auf allen Computern usw. funktionieren. Zum Beispiel Allegro_v4, Allegro_v5, SDL (Simple DirectMedia Layer) oder so etwas. Diese Bibliotheken funktionieren gut mit OpenGL / DirectX, und mit diesen Bibliotheken können Sie Bilder laden, Videos abspielen und ähnliche Dinge. Native OpenGL / GLUT / DirectX können solche Dinge nicht tun.

0voto

qht Punkte 21

Bitte listen Sie Ihr Betriebssystem, wie Sie Ihren Code ausgeführt haben und ob Ihr Computer einen Beeper hat.

Wenn Sie Windows verwenden, könnte Ihnen dieses Q&A Wie man einen Beep-Ton in C unter Windows macht? helfen.

Wenn Sie eine GUI-Desktop-Linux-Distribution verwenden, haben Terminal-Emulatoren wie gnome-terminal oder xfce4-terminal eine Einstellungsoption für das Klingeln. Stellen Sie dann sicher, dass Ihr Lautsprecher funktioniert.

Der unten stehende Code funktioniert gut für mich:

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

#include 

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

Übrigens, Ihr Code ist nicht das Problem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X