Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ciao problema con cin non mi fa mettere i spazi
Forum - C/C++ - ciao problema con cin non mi fa mettere i spazi

Avatar
bip (Normal User)
Rookie


Messaggi: 36
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 19:14
Domenica, 18/01/2009
Allora il codice è:

                do{
            cout<<"\nnome\n";
            cin>>user[z].nome;
            cout<<"\ncognome\n";
            cin>>user[z].cognome;
            cout<<"\nvia\n";
            cin>>user[z].via;
            cout<<"\nlocalità\n";
            cin>>user[z].localita;
            cout<<"\nsigla provincia\n";
            cin>>user[z].provincia;
            cout<<"\ninserisci email\n";
            cin>>user[z].email;
            cout<<"\ncodice fiscale\n";
            cin>>user[z].codicefiscale;
            cout<<"termina inserimonto dati: con 'S stoppare e con 'C continuare'\n";
            cin>>o;
                 ++z;
           }while(o != 's'&& z < 20);
          
           cout<<"\n\n\n\tdati inseriti in memoria,\n";
           cout<<"\tse i dati inseriti sono errati permi di nuovo 0";    
           for(int x=0;x<z;x++){
            cout<<"\nnome\n"<<user[x].nome;
            cout<<"\ncognonome\n"<<user[x].cognome;
            cout<<"\nvia\n"<<user[x].via;
            cout<<"\nlocalità\n"<<user[x].localita;
            cout<<"\nsigla provincia\n"<<user[x].provincia;
            cout<<"\nemail inserita\n"<<user[x].email;
            cout<<"\ncodice fiscale\n"<<user[x].codicefiscale<<"\n\n\n";
            }
            
ma se per caso un nome una via ha uno spzio es: valle dei fiori una volta che premo invio mi salta
tanti cin quanti spazi ho usato che posso fare per evitate questa cosa?
P.s. ho provato a usare gets() ma mi salta da subito e mi parte da località
:ot::grr::ot:


%0edf
PM Quote
Avatar
iGuLy (Ex-Member)
Pro


Messaggi: 66
Iscritto: 17/05/2007

Segnala al moderatore
Postato alle 19:28
Domenica, 18/01/2009
Usa la getline().
Esempio:
Codice sorgente - presumibilmente Plain Text

  1. getline(cin, stringa); // Per le std::string
  2. getline(cin, stringa, size); // Per le altre (char[...])


PM Quote
Avatar
bip (Normal User)
Rookie


Messaggi: 36
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 21:09
Domenica, 18/01/2009
igully cout<<"\nnome\n";
            cin.getline(user[z].nome,20);
            cout<<"\ncognome\n";
            cin.getline(user[z].cognome,20);
            cout<<"\nvia\n";
            cin.getline(user[z].via,20);
            cout<<"\nlocalità\n";
            cin.getline(user[z].localita,25);
            cout<<"\nsigla provincia\n";
            cin.getline(user[z].provincia,3);
            cout<<"\ninserisci email\n";
            cin.getline(user[z].email,20);
            cout<<"\ncodice fiscale\n";
            cin.getline(user[z].codicefiscale,16);
            cout<<"termina inserimonto dati: con 'S stoppare e con 'C continuare'\n";

adesso l'ho modificato così ma quando schiaccio 0 invio che è il numero che ho deciso per l'inserimento mi salta nome e mi va su cognome xchè?
che posso fare?

Ultima modifica effettuata da bip il 18/01/2009 alle 21:09


%0edf
PM Quote
Avatar
iGuLy (Ex-Member)
Pro


Messaggi: 66
Iscritto: 17/05/2007

Segnala al moderatore
Postato alle 19:37
Lunedì, 19/01/2009
Testo quotato

Postato originariamente da bip:

igully cout<<"\nnome\n";
            cin.getline(user[z].nome,20);
            cout<<"\ncognome\n";
            cin.getline(user[z].cognome,20);
            cout<<"\nvia\n";
            cin.getline(user[z].via,20);
            cout<<"\nlocalità\n";
            cin.getline(user[z].localita,25);
            cout<<"\nsigla provincia\n";
            cin.getline(user[z].provincia,3);
            cout<<"\ninserisci email\n";
            cin.getline(user[z].email,20);
            cout<<"\ncodice fiscale\n";
            cin.getline(user[z].codicefiscale,16);
            cout<<"termina inserimonto dati: con 'S stoppare e con 'C continuare'\n";

adesso l'ho modificato così ma quando schiaccio 0 invio che è il numero che ho deciso per l'inserimento mi salta nome e mi va su cognome xchè?
che posso fare?


Se ho capito bene, quando tu hai finito di inserire e vuoi ricominciare da capo ti salta il campo(se non è cosi rispiega che non ho capito molto). Nel caso in cui io abbia capito, ti consiglierei di provare a ripulire il buffer stdin prima di prendere in input dati:
Codice sorgente - presumibilmente Plain Text

  1. ...
  2. fflush(stdin);
  3. ...



PM Quote
Avatar
bip (Normal User)
Rookie


Messaggi: 36
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 10:34
Domenica, 25/01/2009
igully vediamo se riesco essere chiaro:
appena inizia il ciclo while non inizia con il nome e chiedendomi di inserire il nome ma salta l'inserimento nome e mi chiede di insereire partendo dal cognome.. cioè dovrebbe stamparmi a video nome e il cursore che mi faccia mettere nome poi cognome e cusore per cognome ecc... invece parte il ciclo mi stampa a video nome e subito cognome e il cognome posso metterlo mentre il nome no (gia dal primo ciclo mi succede questo non centra ripulire la memoria)....


%0edf
PM Quote
Avatar
bip (Normal User)
Rookie


Messaggi: 36
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 18:11
Martedì, 27/01/2009
aiuto aiuto quacuno mi aiuti non ne vengo fuori:ot::alert::ot:


%0edf
PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 11:09
Mercoledì, 28/01/2009
come ti ha detto iGuLy devi mettere
fflush(stdin);
prima dei getline e il problema si risolve


Q: I need help, give me some pointers!
R: 0x3A28213A, 0x6339392C, 0x7363684E, ...
PM Quote