mercoledì 21 dicembre 2011

C/C++ - Lettura testo dalla tastiera

Nel post precedente ho spiegato come creare il nostro primo programma in C/C++, che scrive in output il famoso saluto "Hello, World!", ma non abbiamo ancora visto come fare a leggere del testo dalla tastiera. Beh, non è una cosa molto difficile, perché basta importare la libreria che ci interessa e utilizzare la funzione per la lettura del tasto premuto.
Il modo più semplice è quello di usare un name space introdotto con il C++ chiamato cin che sta per c input, ovvero lettura dai dispositivi di input. Vediamo ora il codice che ci permette di fare questa lettura:


Come possiamo vedere la struttura generale dei programma resta uguale a quella del programma di "Hello, World!", cambiando soltanto il corpo della funzione main
Da notare è che con '//' viene indicato l'inizio di un commento su una riga e tutto ciò che sta dopo '//' fino alla fine della riga verrà ignorato dal compilatore.  Se, invece, vogliamo scrivere un commento su più di una riga dobbiamo indicare l'inizzio e la fine del commento con '/*' e '*/' rispettivamente. 
Vediamo in dettaglio cosa fa ognuna delle istruzioni del corpo della nostra funzione:

char buff[255] - crea un array lungo 255 elementi di tipo char. In altre parole viene riservata una locazione di memoria per la scrittura di contenuti di tipo char(carattere), la cui lunghezza è, appunto, 255. E` importante sapere che in C/C++ gli array di caratteri vengono interpretati come stringhe e anche se sono stati creati nuovi tipi che rappresentano le stringhe, questo tipo di rappresentazione viene usata molto, soprattutto da quelli che sono agli inizi.

cout << "Digita qualcosa: " - con questa istruzione viene scritto in output il testo che segue dopo '<<'. Nell'esempio di "Hello, World!" abbiamo visto come scrivere del testo sullo schermo utilizzando la funzione printf, mentre qui ho deciso di mostrarvi come è possibile fare la stessa cosa, utilizzando le novità introdotte con l'avvento di C++. In questo esempio è stato usato il name space cout, dichiarato con la 4° riga del codice, dicendo di utilizzare il name space std(standard), che reindirizza con l'operatore '<<' il flusso di dati in output, inviando tutto quello che sta dopo tale operatore. Il risultato è la scrittura sullo schermo del testo "Digita qualcosa: ".

cin.getline(buff,255) - con questa istruzione, riusciamo a leggere una linea di testo inserito dalla tastiera, cioè il testo digitato fino alla pressione del tasto 'Invio'. Come possiamo notare la variabile cin non è stata dichiarata da nessuna parte, nonostante ciò l'abbiamo utilizzata, perché anche essa è un name space come cout, però per gestire il flusso in input, che nel nostro caso è il testo digitato sulla tastiera. Il punto messo dopo cin indica che esso è un oggetto, che ha degli metodi, o in altre parole su di esso possono essere effettuate delle operazioni, che nel nostro caso è la lettura di una linea dal prompt dei comandi. Il metodo getline ha due argomenti di cui il primo indica la variabile di tipo stringa(nel nostro caso un array di caratteri) nella quale andare a scrivere la sequenza dei caratteri premuti sulla tastiera, mentre il secondo argomento indica la lunghezza della stringa.

cout << "Hai scritto: " << buff << endl - anche in questo caso viene usato il name space cout per scrivere il output, però questa volta abbiamo più operatori '<<', che come se fossero degli '+' per concatenare tutti i termini. Infatti, in output avremo prima il testo "Hai scritto: ", dopodiché seguirà il contenuto di buff, in cui è memorizzato il testo scritto da noi e infine endl, che non è altro che una costante che indica la fine della linea e porta il cursore a capo di una nuova.

Adesso se provate ad eseguire il vostro programma dovreste vedere il seguente output:


Il programma sembra essere coretto, però se provate a digitare più di 255 caratteri il testo digitato viene troncato a 255 caratteri. Certo, potremo aumentare la lunghezza dell'array buff, però non possiamo sapere la lunghezza del testo che verrà inserito dall'utente e poi facendo così andremo a sprecare memoria. Questo problema è dovuto al fatto che in C nel momento della dichiarazione di un array dobbiamo indicare la sua lunghezza. Il problema può essere risolto con l'aiuto dei puntatori e lo vedremo più avanti, ma questo è un altro argomento.


Download progetto Dev C++ lettura_tastiera.zip.


Non dimenticate del +1 :) 

Nessun commento:

Posta un commento