Questo programma suona la campana!

Sono uno studente nuovo di zecca nell’arena della programmazione, quindi non posso cogliere questo programma scritto nel mio libro che seguo da alcuni giorni. Il programma è come questo:

#include "stdio.h" main() { printf("\a"); } 

Cosa significa questo programma? Questo programma significa che potremmo sentire un campanello? Non riesco a sentire nessun suono di campanello !!!

Il carattere ASCII 7 è il carattere BELL, ed è rappresentato in C come \a . Alcuni terminali emettono un segnale acustico quando questo carattere viene emesso sul terminale; oggigiorno, molti no. (Ti sto guardando, Ubuntu.)

Nelle epoche buie in cui ASCII era codificato dalle ceneri di BAUDOT , un terminale era un grosso pezzo di ferro che martellava l’inchiostro sulla carta, spesso comprendente un punch e un lettore di nastro di carta, e interpretava i tasti per generare un segnale seriale asincrono ad un poche centinaia di baud con ruote e relè rotanti.

Nel caso in cui un operatore si addormentasse per i rumori lenitivi di esso che batteva fuori testo, aveva una campana effettiva che poteva suonare. Il carattere codificato 007 in ottale, 0x07 in esadecimale, o come \a in un carattere C o costante di stringa suonava il campanello quando ricevuto.

Quando i terminali si sono ridotti e sono stati implementati con poche o nessuna parte in movimento, la campana fisica è stata sostituita da un segnale acustico.

Esattamente ciò che l’emulatore di terminale (ovvero una finestra di console in Windows, xterm o qualcosa di simile in Unix) fa quando viene chiesto di mostrare che il carattere di controllo non è ben standardizzato oggi. Dovrebbe fare rumore o infiammare la finestra, ma il tuo chilometraggio può variare.

Dai un’occhiata a questa voce di wikipedia: bell character :

Nel linguaggio di programmazione C (creato nel 1972), il carattere di campana può essere inserito in una stringa o costante di carattere con \ a (‘a’ sta per “alert” o “udibile” ed è stato scelto perché \ b era già usato per backspace ).

Sentirai un segnale acustico dall’altoparlante interno del tuo PC (non gli altoparlanti esterni o le cuffie che potresti avere allegato).

in effetti innesca il rintouch del sistema. È la sequenza di escape per il carattere ASCII BEL .

\ a è la rappresentazione C del carattere di controllo di allarme acustico ASCII (“campana”). Su un terminale seriale della vecchia scuola, emettendo quel personaggio produceva un suono “beep”. L’emulatore di terminale può o non può implementare questa funzione.

Prova qualcosa di più semplice:

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

e vedi cosa succede

Il tuo esempio con BELL char, come altri hanno sottolineato, probabilmente non funzionerà sui tostapane di oggi ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H ^ H computers; la maggior parte dei terminali reindirizza il carattere ‘campana’ per essere scartato o per lampeggiare brevemente il terminale.

E credimi, vuoi mantenerlo così per le sessioni di codifica notturna 🙂

Oltre a tutte le risposte che hai, tieni conto che il tuo programma probabilmente non verrà compilato. Ecco la versione fissa:

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

La modifica più importante è che le intestazioni di sistema devono essere associate a , anziché a virgolette. Inoltre, è meglio sapere che la funzione main () restituisce sempre un int (al sistema operativo) e che questo int è codificato in due costanti, EXIT_SUCCESS e EXIT_FAILURE, nell’intestazione stdlib.h

Le stringhe possono contenere caratteri gestiti diversamente da tutti gli altri caratteri. L’usato più spesso esplicito è '\n' . Il carattere '\n' non stampa un personaggio nella console, ma dice alla console di iniziare una nuova riga. Tali caratteri speciali sono chiamati non stampabili poiché non hanno una propria rappresentazione visibile in c e devono invece usare sequenze di escape.

Nella sequenza di escape "\a" il backslash prima di a dice al compilatore che a è un identificatore per un carattere speciale e memorizzerà il suo valore di char invece del valore di char di 'a' .

La sequenza di escape '\a' è il carattere di campana udibile, che conferisce questo carattere a una console tramite print () dovrebbe causare un segnale acustico. Alcune console non emettono segnali acustici.

Ecco alcuni caratteri speciali, il collegamento è da un riferimento c ++ ma la maggior parte dovrebbe essere valida per c.

Il suddetto programma che hai scritto l’ho provato nei blocchi di codice usando GNU GCC Compiler.

Sta funzionando bene ..

Se vuoi sentire un segnale acustico, puoi provare in un altro modo che sarà utile solo in Windows!

 #include #include main() { Beep(600,600); /* you have to enter both the values whatever you want } 

Per una questione di interesse, sembra funzionare in tutte le build che non hanno un punto di ingresso wWinMain o WinMain. wprintf(L"\a") suona bene per le build Unicode. (Vinci 7 qui).

L’altoparlante del PC dipendeva da “speaker.drv”, ma quella piccola bellezza è stata rimossa un po ‘di tempo indietro e sostituita con beep.sys, che ora viene spostata nell’agente dei suoni del sistema in modalità utente .

Qui è anche discusso l’abilitazione e la disabilitazione del diffusore dal prompt dei comandi.

 #include int main() { int i = 263; putchar(i); // or you can directly use putchar(263); return 0; } 

Questo programma produce un suono di campanello mentre sei sulla schermata di uscita