Newsgroup: it.comp.lang.c++
Titolo: [niubbo] cin e cin.getline

Salve a tutti, mi chiamo Andrea e ho iniziato a cimentarmi (ma sarebbe
meglio dire cEmentarmi) col C++ da pochissimo. È tosto, specialmente
per chi non ha mai programmato prima, ma a parte la mia inesperienza
aveva un (uno?) dubbio...
Sono ancora a metà di un manuale, ma mi stavo chiedendo perché gli
sviluppatori non hanno fatto qualcosa per il comportamento "anomalo"
di cin.getline usato dopo cin.
Sarà anche logicamente corretto, ma io ci ho perso tutto un pomeriggio
a capire perché in esecuzione il programma mi "saltasse" il primo
cin.getline -____- adesso risolvo con ws(cin) prima del cin.getline...
Uso (uso... diciamo che sfioro qualche funzione) il DevC++ sotto win.
Grazie per le vostre eventuali chiarificazioni ^__^
-- 
You know you're in trouble 
when there is nothing left on the altimeter 
but the maker's name

 Grazie per le vostre eventuali chiarificazioni ^__^
Ciao,
Vedo che a giorni di distanza nessuno ti ha ancora risposto. Accedo ai
messaggi del NG solo quando posso e mi sono accorto ora della tua domanda.
Credo di essermi fatto un'idea abbastanza precisa di ciò che volevi
chiedere, ma ti devo fare notare che hai posto la domanda nel peggiore dei
modi possibili.
1) "...comportamento anomalo di cin.getline() usato dopo cin" non significa
niente: vuoi dire che hai un'istruzione "cin cin.getline();"?
2) Che vuol dire "... in esecuzione il programma mi saltasse il primo
cin.getline()"? Intendi veramente dire che la funzione non viene eseguita?
Probabilmente intendevi dire che cin.getline() è eseguita senza aspettare
che tu immetta dei caratteri da tastiera...
Ti ho scritto le precedenti note solo per dirti che se non formuli le tue
domande con la dovuta attenzione non ottieni nessuna risposta in cambio,
prima di tutto perchè la gente non ha molta voglia di inventarsi significati
per i messaggi che non ne hanno.
Passiamo al problema: NON esite nessun problema con cin.getline(),
eventualmente esiste solo quello di sapere cosa fa e quindi come
utilizzarla.
Proviamo a vedere se comunque ho capito cosa intendevi; qui di seguito ti
mostro un programma con ERRORI che dovrebbe comportarsi come hai tentato di
descrivere. Compilalo e fallo girare, please.
#include<iostream>
using std::cin;
using std::cout;
int main ()
{
    const int SIZE = 80;
    int n;
    char buffer[SIZE];
 
    cout << "Enter a number\n";
    cin >> n;
    cout << "You wrote " << n << '\n';
 
    cout << "Enter a sentence\n";
    cin.getline (buffer, SIZE, '\n');
    cout << "The string read with cin.getline() is\n" << buffer << '\n';
    return 0;
}
Come vedi non si fa nessun controllo sui valori immessi. Ma l'errore più
grave è quello di dimenticarsi che, dopo "cin >> n;", sullo stream rimane il
carattere di newline che dopo sarà letto dalla cin.getline() senza darti la
possibilità di inserire la frase richiesta.
Di seguito il programma corretto. Compilalo e fallo eseguire, anche
immettendo caratteri oppure numeri enormi da dare in pasto a "n" e anche
scrivendo frasi di lunghezza maggiore di SIZE.
#include<iostream>
#include<limits>
using std::cin;
using std::cout;
int main ()
{
    const int SIZE = 80;
    int n;
    char buffer[SIZE];
 
    cout << "Digita un numero:\n";
    if( cin >> n )
        cout << "Hai scritto:\n" << n << '\n';
    else
        cout << "Non è un \"int\" oppure il valore è fuori range\n";
 
    cin.clear();
    cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
 
    cout << "Digita dei caratteri stampabili:\n";
    if( cin.getline (buffer, SIZE, '\n') )
        cout << "I caratteri letti con cin.getline() sono:\n" << buffer << '\n';
    else
        cout << "Il numero di caratteri è maggiore di SIZE" << '\n';
    return 0;
}
Spero di non avere fatto troppi errori, data anche l'ora insolita. Ma
soprattutto spero di avere bene interpretato il problema. Se hai ancora
difficoltà posta il tuo codice.
Buon lavoro,
Fabio De Francesco
(alias fabiomdf)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

difficoltà posta il tuo codice.
Devo ricontrollare bene il programma che hai scritto perché ho ancora
qualche piccola difficoltà nel leggere il codice, cmq per ora ti
ringrazio molto.
Ciao,
Andrea.
