Ciao raga, ho un problema.
Voglio dare in in-put una stringa (nome).
Il mio problema e' che se inserisco dei caratteri e poi uno spazio, il programma va in loop.
Come devo fare per gestirlo??
Capirei meglio con un esempio semplice
Ciao raga, ho un problema.
Voglio dare in in-put una stringa (nome).
Il mio problema e' che se inserisco dei caratteri e poi uno spazio, il programma va in loop.
Come devo fare per gestirlo??
Capirei meglio con un esempio semplice
Anche noi capiremmo meglio se tu postassi il codice che genera il loop, in quanto non tutti gli inserimenti da tastiera che generano un loop hanno la stessa soluzione.
il codice che genera il loop, e' un mio vecchio programma, era un esempio.
Io intendo adesso gestire la stringa in modo tale, che posso inserire una o piu' parole (distaccata da uno spazio vuoto).
Bè se però tu dici che hai un problema in un programma che va in loop all'inserimento di input si capisce che si deve risolvere il problema in quel programma... per questo ti ho invitato a postare il codice, e comunque troverei costruttivo da parte tua capire perchè si genera il loop e magari capendolo potresti avere anche ciò che cerchi...Originariamente inviato da Salvatore_91
il codice che genera il loop, e' un mio vecchio programma, era un esempio.
Comunque se ti basta un semplice esempio ti invito a usare la libreria string per gestire le stringhe e usare la funzione getline per leggere una riga, per meglio vedi qui.
Ti ringrazio.
Pero' poiche' io devo scrivere la stringa sul file, non funziona.
quando le eseguo, il compilatore, non mi fa inserire il 'nome', dice di inserire la 'marca'codice:string nome,marca; ofstream write("Listino.txt",ios::out); cout << "INSERISCI IL NOME" << endl; getline (cin,nome); nome.resize(20); write << nome; cout << "INSERISCI LA MARCA" << endl; getline (cin,marca); marca.resize(20); write << marca;
Ci sono anche altri input prima della getline??? Non hai postato tutto il codice giusto???
C++ 4ever
496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29
questo è la parte, che richiama la procedura:
codice:if (scelta==1) { ofstream write("Listino.txt",ios::out); write << "COD."; write.seekp (5, ios_base::beg); write << "NOME"; write.seekp (25, ios_base::beg); write << "MARCA"; write.seekp (45, ios_base::beg); write << "PREZZO"; write.seekp (55, ios_base::beg); write << "Quantita" << endl; Num=1; acquis_scritt(write); write.close(); } ... ... void acquis_scritt(ofstream &write) { //////////////////////////// Scrive il contenuto di variabile stringstream s; // intera su file di 5 byte string ss; // s << Num; // ss = s.str(); // ss.resize(5); // write <<ss; // ///////////////////// cout << "Inserisci il nome:"<<endl; //cin >> nome; getline (cin,nome); nome.resize(20); write << nome; cout << "Inserisci la marca:"<<endl; //cin >> marca; getline (cin,marca); marca.resize(20); write << marca; cout << "Inserisci il prezzo:"<<endl; cin >> prezzo; prezzo.resize(10); write << prezzo; cout << "Inserisci la quantita':"<<endl; cin >> quantita; quantita.resize(5); write << quantita << endl; }
Il problema e' che il programma, mi salta il primo inserimento (inserisci NOME), e si ferma al secondo (inserisci la marca), cioe' aspetta che inserisco la marca
questo e' quello che mi viene visualizzato sul monitor quando cerco di inserire un prodotto
codice:Inserisci il nome: (qui non mi fa inserire nnt, salta direttamente all' istruzione successiva) Inserisci la marca: (qui si aspetta che io inserisca qualkosa)
Prima della prima getline inserisci
cin.ignore();
No MP tecnici (non rispondo nemmeno!), usa il forum.
Si, in questo modo funziona correttamente.
Pero' quando cerco di fare la stampa a video del file, mi da problemi (cioe' mi stampa la prima parola inserita ad esempio del nome)
Nome = Giuseppe peppe;
il mio programma mi stampa solo = Giuseppe;
codice:string nome,marca,linea,quantita,prezzo; ... ... ofstream write("Listino.txt",ios::out); cout << "Inserisci il nome:"<<endl; cin.ignore(); getline (cin,nome); nome.resize(20); write << nome; cout << "Inserisci la marca:"<<endl; cin.ignore(); getline (cin,marca); marca.resize(20); write << marca; cout << "Inserisci il prezzo:"<<endl; cin >> prezzo; prezzo.resize(10); write << prezzo; cout << "Inserisci la quantita':"<<endl; cin >> quantita; quantita.resize(5); write << quantita << endl; ... // io adesso richiamo la procedura 'leggi_stampaV' void leggi_stampaV() { system("CLS"); int rig=conta_righe(); ifstream read("Listino.txt",ios::in); if(read) { for(int i=1;i<=rig;i++) { read >> linea; cout << linea <<endl; } } else cout << "File 'Listino.txt' inesistente!! \n" << endl; read.close(); } //CONTA RIGHE int conta_righe() { fstream file; string s; int contarighe=0; file.open("Listino.txt",ios::in); if(file) { while(!file.eof()) { getline(file,s,'\n'); contarighe++; } } return contarighe-1; }