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?
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?
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;
}
Du könntest zumindest zugeben, dass C99 existiert, auch wenn du denkst, dass der Fragesteller es nicht verwendet ;-)
Selbst in C99
ist int main()
nicht gleichwertig mit einer der beiden veröffentlichten Definitionen.
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.
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.
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.
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 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.
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).
0 Stimmen
@Lie Ryan Ich habe es auch im Terminal versucht, aber kein Signalton. Ich habe folgenden Befehl eingegeben printf '\a' im Terminal, aber es ist nichts passiert...
1 Stimmen
@Parixit: Was ist Ihr Betriebssystem und welches Terminalprogramm verwenden Sie?
0 Stimmen
@Lie Ryan Ich verwende Ubuntu 10.04
0 Stimmen
Um die Flushing-Probleme von printf() zu vermeiden, ändern Sie Ihr Programm und versuchen Sie diese Ersetzungen:
#include
write(1,"\a",1);
, die auch in einem Terminal ausgeführt werden müssen.0 Stimmen
Ein häufiger Grund, warum der Piepton nicht funktioniert: Der interne Lautsprecher ist nicht verfügbar oder das Lautsprecher-Kernelmodul ist deaktiviert. Ich mache dies oft auf meinen Desktop-Maschinen mit
modprobe -r pcspkr
, was die Kommunikation mit dem internen Lautsprecher auf dem Mainboard vollständig deaktiviert. Viele Hersteller integrieren diesen Lautsprecher nicht einmal in Laptops.