[FondInfo] Re: cin.get()

Eduardo Calabrese educal a unipr.it
Mer 11 Gen 2006 10:29:14 CET


Ci sono diverse forme del get, che si comportano come funzioni diverse
(function overloading).
Immagino che lei si riferisca alla forma

istream &get( char *buffer, int num );

dove il get ha 2 argomenti, il primo un puntatore a char e il secondo
un numero intero.  Ad esempio, rifacendosi all'esempio che lei cita:

cin.get(film.regista,22);

Questa forma legge dal buffer di tastiera fino a 21 caratteri, oppure
fino al newline; ma, se incontra il newline, questo non viene letto da
questa forma del get e rimane nel buffer di tastiera.  Occorre
un'altra istruzione per togliere il newline dal buffer (ecco il
significato della funzione acapo!).

Cordiali saluti,
Eduardo Calabrese





On 1/10/06, ..... wrote:
> Egregio professor Calabrese
>
> Le scrivo per avere un breve chiarimento riguardo l'esempio "a750binf.cpp" :
> Durante l'introduzione dei dati dall'esterno attraverso il 'cin.get()', ho
> notato che diviene necessario un accorgimento, in questo caso la funzione
> 'acapo()', poichè l'istruzione 'cin.ge't (e 'cin.getline')
> generano un loop infinito in cui ho l'impressione che il programma riceva
> continuamente in input il newline: '\n'.
> Mi chiedevo perciò, perchè il 'cin.get()' agisce così, cosa riceve dal buffer?
> Oppure è il ciclo while che invia a tutti i 'cin.get()' lo stesso buffer?
> Comunque il rimedio più immediato sarebbe quello di usare un semplice 'cin',
> anche se così facendo non posso leggere delle stringhe contenenti spazi!
> La ringrazio anticipatamente per il tempo rubato e mi scuso se (come probabile)
> ha già spiegato questo esempio a lezione.
>
> Distinti saluti
>
>
>
>
>



--
Eduardo Calabrese
Dip.to di Ingegneria dell'Informazione
Universita' di Parma



Maggiori informazioni sulla lista FondInformatica