View Full Version : [C++] problema con CIN
pagliaccino77
04-09-2002, 18:14
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
Non è che il problema è prima ? Magari nello stdin hai già qualche Invio...
prova a mettere un cin.ignore() all'inzio della funzione...
pagliaccino77
05-09-2002, 10:49
okay
grazie
funziona ora
anche se non sono riuscito a capire dove sbagliavo
....
alla prox
Originariamente inviato da pagliaccino77
[B]okay
grazie
funziona ora
anche se non sono riuscito a capire dove sbagliavo
....
alla prox
Ti restava un carattere nello stdin...usavi qualche funzione che non prelevava i caratteri dallo stdin tipo kbhit() ?
pagliaccino77
05-09-2002, 12:53
Originariamente inviato da cionci
[B]
Ti restava un carattere nello stdin...usavi qualche funzione che non prelevava i caratteri dallo stdin tipo kbhit() ?
avevo fatto cosi':
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?
pagliaccino77
05-09-2002, 12:59
errata corrige
case 3: {
system("cls");
cliente nuovo;
nuovo.crea();
progetto.ins_cliente(nuovo);
premitasto();
break;};
Se il menù ha meno di 10 opzioni puoi usare cin.get() al posto di cin >> nn;
Per il resto ti faccio sapere...
Questo dovrebbe fare al caso tuo...
#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));
}
pagliaccino77
05-09-2002, 16:34
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.? ;-)
:D :D :D :p
alla prox, spero che allora sia io ad aiutarti...magari in altri campi :cool:
a presto
:)
Per l'altra situazione sinceramente non saprei come fare...
Comunque è stato un piacere...
Ciao :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.