|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2002
Messaggi: 19
|
[C++] problema con CIN
ciao ragazzi,
in una parte, e solo in quella, devo mettere due cin altrimenti mi salta la chiamata, come se non l'avessi scritto! ecco: nel main c'e': cliente nuovo; nuovo.crea(); e nelle classe cliente: void cliente::crea(){ cout<<endl<<"CLIENTE"<<endl; cout<<"Nome : " Stringa<50> nn; cin>>nn;// PROBLEMA !!!!! cin>>nn; nome_cliente=nn; cout<<"Codice: "; int c; cin>>c; codice_cliente=c; }; praticamente se non metto il secondo cin mi passa subito a codice. E' strano, non capisco, dove sbaglio? come rimedio? grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non è che il problema è prima ? Magari nello stdin hai già qualche Invio...
prova a mettere un cin.ignore() all'inzio della funzione... |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: May 2002
Messaggi: 19
|
okay
grazie funziona ora anche se non sono riuscito a capire dove sbagliavo .... alla prox |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#5 | |
Junior Member
Iscritto dal: May 2002
Messaggi: 19
|
Quote:
int main(){ bool esci=false; int n; while (!esci){ system("cls"); cout<<"(2) - Visualizza Archivio_clienti"<<endl; cout<<"Inserisci la scelta desiderata e premi INVIO "; cin<<n; switch(n){ case 2: { system("cls"); progetto.stampa_archivio_clienti(); premitasto(); break; }; case 0: { esci=true; break; }; default: cout<<endl<<"ERRORE"<<endl; }; }; return 0; }; A dire il vero stavo cercando anche di evitare che premendo un carattere si verificassero problemi, una gestione degli errori che se si immette una stringa invece di un int segnala l'errore e continua.... tu che dici? |
|
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: May 2002
Messaggi: 19
|
errata corrige
case 3: { system("cls"); cliente nuovo; nuovo.crea(); progetto.ins_cliente(nuovo); premitasto(); break;}; |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se il menù ha meno di 10 opzioni puoi usare cin.get() al posto di cin >> nn;
Per il resto ti faccio sapere... |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Questo dovrebbe fare al caso tuo...
Codice:
#include <iostream> #include <string> using namespace std; int leggiIntero(int &c) { string s; cin >> c; if(cin.fail()) { cin.clear(); cin >> s; cout << "\nerrore\n\n"; return 0; } return 1; } void main() { int c; while(!leggiIntero(c)); } |
![]() |
![]() |
![]() |
#9 |
Junior Member
Iscritto dal: May 2002
Messaggi: 19
|
ok, ti ringrazio tantissimo
ho creato 3 funzioni del tipo prendi(n) dove n puo' essere int,long,unsigned e le ho sostituite a tutti i cin (che poi erano pochi), tutto va bene, tranne una cosa: se si immette una stringa che inizia per un numero tipo 4gdfgfdgdfs mi prende 4 come intero e alla successiva richiesta di leggi() oppure di cin>>stringa mi ci riversa gdfgfdgdfs. cmq non voglio darti noie ulteriori, il programma adesso è un tantino meno fragile e questo lo devo a te, qual è il tuo # di c.c.? ;-) ![]() ![]() ![]() ![]() alla prox, spero che allora sia io ad aiutarti...magari in altri campi ![]() a presto ![]() |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per l'altra situazione sinceramente non saprei come fare...
Comunque è stato un piacere... Ciao ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:52.