Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C++] gestione stringa

  1. #1

    [C++] gestione stringa

    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

  2. #2
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    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.

  3. #3
    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).

  4. #4
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da Salvatore_91
    il codice che genera il loop, e' un mio vecchio programma, era un esempio.
    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...

    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.

  5. #5
    Ti ringrazio.
    Pero' poiche' io devo scrivere la stringa sul file, non funziona.

    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;
    quando le eseguo, il compilatore, non mi fa inserire il 'nome', dice di inserire la 'marca'

  6. #6
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ci sono anche altri input prima della getline??? Non hai postato tutto il codice giusto???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  7. #7
    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;
    
    }

  8. #8
    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)

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Prima della prima getline inserisci

    cin.ignore();
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    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;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.