Funzioni Printf e Scanf
Analizziamo le funzioni printf e scanf nel linguaggio C.
Si tratta di due funzioni dove la prima, printf, รจ una funzione di output, la seconda, scanf, รจ una funzione di input.
Per essere usate, essendo delle funzioni predefinite, occorre richiamare una libreria esterna, attraverso la direttiva include.
La lettura e la scrittura dall'esterno verso l'esterno puรฒ ovviamente riguardare diversi tipi di dati, e quindi prima di trattare le funzioni, vediamo quali sono i principali specificatori di formato in C, cioรจ se devo dire a printf di stampare una variabile char, dovrรฒ usare percentuale c e, in questo caso, indico un carattere singolo.
Se devo, invece, scrivere o leggere, quindi input-output, una stringa di caratteri, userรฒ la variabile, userรฒ il descrittore di formato percentuale s, per un intero senza segno, percentuale u, per un float, cioรจ per un numero reale con segno, percentuale f, per un intero decimale con segno, per un intero, quindi, con segno, percentuale d o percentuale i.
Entriamo nello specifico.
Vediamo la sintassi di printf.
Printf รจ un'istruzione di output.
Serve per visualizzare un messaggio a video, una stringa di testo o un numero, una stringa alfanumerica.
Allora, viene indicata con printf e poi all'interno di una parentesi tonda metteremo il testo, un eventuale testo che sarร scritto esattamente come a video, esattamente come noi lo scriviamo all'interno dei doppi apici, e poi metteremo uno specificatore di formato.
Quindi, diremo che dopo il testo seguirร il valore di una qualche variabile che sarร una variabile di un certo tipo.
Quindi, metteremo uno specificatore di formato per l'intero, per il char, per la stringa, e cosรฌ via.
A quello specificatore di formato in output verrร sostituito il valore dell'espressione che vediamo nell'ultima parte della mia istruzione.
Quindi, invia al dispositivo di output il messaggio posto fra i doppi apici, che io ho composto tra i doppi apici.
Vediamo degli esempi.
Un primo esempio รจ stampare una semplice stringa a video, quindi io voglio stampare โstampo a videoโ, quindi scriverรฒ esattamente quello che voglio stampare all'interno dei doppi apici.
Non si รจ utilizzato, in questo caso, nessuno specificatore di formato, quindi non c'รจ un'espressione all'interno delle parentesi tonde che va ad assegnare un valore allo specificatore di formato, stampo semplicemente una frase.
Se, invece, voglio stampare a video la lettera A, che รจ un char, รจ un singolo carattere potrรฒ scrivere printf percentuale c, quindi stamperรฒ un carattere, e quel valore e quel carattere sarร sostituito dall'espressione,
dall'espressione che รจ una stringa racchiusa da apici singoli.
Posso anche inserire un testo prima del descrittore di formato, cosรฌ come prima ho stampato, appunto, una frase nell'esempio precedente.
Per esempio, print โBase uguale percentuale dโ, allora l'espressione รจ data dalla variabile base.
Quindi, fondamentalmente, che cosa faccio?
Stamperรฒ a video il valore intero della variabile base.
Base avrร un certo valore e quindi verrร stampato a video.
Questo segno di percentuale, รจ utilizzato per lo specificatore di formato.
Per stampare il carattere, quindi, siccome si tratta di una parola chiave, per stampare quel carattere lรฌ, devo inserirne due, cioรจ se inserisco due segni di percentuale, allora stamperรฒ, per esempio, la frase sconto del 30 percento a video.
Perรฒ, devo inserirne due per dire al compilatore di non interpretare quel percentuale come una parola chiave, ma di interpretarlo come un carattere qualsiasi.
Posso comporre il testo anche con delle sequenze di escape, cioรจ con dei caratteri non visualizzati o riservati, ma che contribuiscono a formattare il testo.
Allora, questi caratteri iniziano con il backslash e sono interpretate come un singolo carattere che, perรฒ, non viene stampato a video, ha un qualche significato di formattazione.
Per esempio, โbackslash nโ vuol dire vai a capo, โbackslash tโ vuol dire tabulazione, e cosรฌ via.
Se voglio scrivere a video i doppi apici, siccome i doppi apici sono una parola, sono un simbolo utilizzato dal mio, dal linguaggio di programmazione, รจ un un simbolo riservato, per stampare esattamente i doppi apici, lo dovrรฒ far precedere dal backslash, e cosรฌ via, qui abbiamo diversi esempi nella slide che stiamo guardando in questo momento.
Vediamo, invece, l'operazione di scanf, cioรจ la funzione scanf, che รจ un'istruzione di input.
Consente di acquisire una sequenza di caratteri, lettere o cifre o stringhe dalla tastiera e di memorizzarli all'interno di variabili.
Vediamo la sua sintassi: scan f parentesi tonde, all'interno delle parentesi tonde ci sarร una qualche stringa di formato, che poi andremo a vedere nello specifico come la componiamo, e abbiamo poi l'espressione variabile, cioรจ la variabile che deve essere letta.
Allora, la stringa di formato rappresenta lo specificatore di formato ed รจ preceduto dal simbolo, dal simbolo percentuale, cioรจ dobbiamo dire all'istruzione scanf, alla funzione scanf, che tipo di dato dobbiamo aspettarci in input.
La variabile rappresenta il nome della variabile all'interno della quale verrร memorizzato il dato che io digito, per esempio, da tastiera.
Quindi, nello specifico, scanf percentuale d vuol dire che io vado a leggere da tastiera, che cosa?
Un numero intero che andrรฒ a mettere, ad inserire all'indirizzo di memoria in cui si trova la variabile x, cioรจ leggi un dato numero intero, leggi un intero che viene dato in input e collocalo nella posizione di memoria il cui indirizzo รจ ampersand, cioรจ quella e commerciale, x.
L'omissione di quel simbolo, e commerciale, non comporta messaggi di errore da parte del compilatore, ma comporta degli errori nei risultati perchรฉ, in C, io vado sempre a dare un indirizzo a cui, in cui viene immagazzinata la variabile, e quindi questo deve essere tenuto in conto quando si programma.
In quest'altro caso, vediamo che abbiamo da tastiera la lettura di due numeri interi che andranno a, quindi, acquisiamo due numeri interi, che verranno memorizzati nelle variabili x ed y, vado, perรฒ, a specificare l'indirizzo in cui รจ contenuta la variabile x e l'indirizzo in cui รจ contenuta la variabile y, attraverso quella e commerciale.
Ancora scanf.
Se vado ad acquisire da tastiera un carattere, quindi acquisisci un qualsiasi carattere, una lettera, uno spazio, un tabulatore, un backspace, anche, quindi, sequenze di escape, cioรจ caratteri non stampabili, e lo acquisisci, insomma, per esempio, da tastiera e lo vai a immagazzinare all'indirizzo ampersand, e commerciale, carattere, dove รจ contenuto il valore della variabile carattere.
Il tipo char รจ un intero, quindi, se, ad esempio, digitiamo la lettera A, nella variabile carattere viene memorizzato in realtร un numero, un numero perchรฉ nella tabella ASCII ad ogni carattere viene associato un numero binario.
Quindi, in realtร , noi andiamo a inserire un numero intero che rappresenterร una lettera, insomma, un carattere alfabetico oppure una sequenza di escape.
Vediamo qui un esempio, allora, dobbiamo utilizzare printf e scanf, quindi, andiamo a dare la direttiva include per includere le librerie di input-output standard, std d io punto h, abbiamo poi il blocco main che รจ racchiuso da due parentesi graffe, abbiamo la dichiarazione di variabili, dove abbiamo una variabile di tipo int, intero, una variabile di tipo float, quindi numero reale virgola, e una variabile di tipo char.
Quindi, andiamo a stampare, quindi a mandare in output, che cosa?
Un a capo, new line, inserisci un carattere, due punti, andiamo a leggere da tastiera, da input, un carattere che verrร immagazzinato nella variabile c, lo stampiamo a video, carattere due punti, e andremo a stampare il carattere che abbiamo letto.
Poi, stampiamo nuovamente a video, dopo aver dato un new line, quindi dopo essere andati a capo, e inserisci un numero intero, lo leggiamo da video.
Questo numero intero viene immagazzinato nella variabile intero che abbiamo definito prima.
Stampiamo a video intero due punti, e poi il numero che abbiamo immagazzinato nella variabile intero.
Poi, gli diciamo inserisci un numero con la virgola, invece, che sarร un numero float, lo inseriamo a video, lo andiamo ad immagazzinare nella variabile virgola, e poi lo stampiamo a video.
Questo descrittore percentuale qua, nell'ultima riga, 5 punto 2 dice che appunto avremo due cifre significative dopo la virgola.
Quindi, รจ un float in cui a video andiamo a stampare due cifre significative dopo la virgola, cioรจ il descrittore ci dice anche quel numero float come sarร rappresentato, con quante cifre decimali dopo la virgola lo rappresenteremo.