Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15

    [C++] Problemi con l'acquisizione di stringhe da tastiera

    Salve, ho aperto una nuova discussione perché ho un problema diverso. Mi scuso in anticipo se ho sbagliato.
    Vorrei trovare una soluzione per utilizzare cmq le stringhe e non il char [] perchè con i puntatori penso mi sballerebbe tutto....sono già a metà programma.
    C'è un modo per non utilizzare i vettori? Nel codice che ho postato ho provato ad utilizzare getline(cin, stringa) che normalmente funziona ma in questo caso no...
    Esiste un modo? grazie in anticipo

    codice:
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    struct brano
    {
    string titolo;
    string artista;
    string genere;
    brano* next;
    };
    
    brano* testa;
    int attuali = 0;
    
    //Prototipi di funzioni
    void  Titolo();
    void  Menu();
    void  Aggiungi (brano* &);
    void  Visualizza();
    void  Ordina();
    void  Trova();
    void  Elimina();
    void  SvuotaLista();
    
    //funzione principale
    int main()
    {
    
    Titolo ();	
    int risp;	
    brano* testa = NULL;
    
    do {
      do {
    Menu ();
    cout <<"\n\nDigita la tua scelta: ";
    cin >> risp;
    } while (risp <1 || risp > 6);
    switch (risp)
    {
    case 1:
         Aggiungi(testa);
         break;
    case 2:
         Visualizza;
    	 break;
    case 3:
         Ordina;
    	 break;
    case 4:
         Trova;
    	 break;
    case 5:
         Elimina;
    	 break;
    case 6:
    cout <<"\nArrivederci! :) \n\n";
    	 break;
    }
    } while (risp != 6);
    return 0;
    }
    
    // funzioni in dettaglio
    
    void Titolo ()
    {
    cout <<"\n\t LettoreMusicale.cpp   di   Silvia D'Ercole e Vito Montesano    \n";
    cout <<"\n\t Esame di: ALGORITMI E PROGRAMMAZIONE (prof. Vittorio Moriggia) \n";
    cout <<"\n\t                == GESTIONE DI FILE MUSICALI ==                 \n";
     
    } // fine Titolo
    
    void Menu()
    {
    cout <<"\n\t Contatti attualmente presenti: " << attuali << endl;	
    cout <<"\n\n\t            == Menu'==           \n";
    cout <<"\n\t [1]: Aggiungi un nuovo brano      \n";
    cout <<"\n\t [2]: Visualizza i brani inseriti  \n";
    cout <<"\n\t [3]: Ordina brani                 \n";
    cout <<"\n\t [4]: Trova un brano               \n";
    cout <<"\n\t [5]: Elimina brano                \n";
    cout <<"\n\t [6]: Esci\n";
    } // fine Menu
    
    void Aggiungi (brano* &testa)
    {
    	
    string TitoloBrano;
    string ArtistaBrano;
    string GenereBrano;
    
    brano* nuovo;
    nuovo = new brano;
    
    cout <<"\n\n == NUOVO ELEMENTO == \n";
    cout <<"\nTitolo brano:   \t";
    getline(cin,TitoloBrano);
    cout <<"\nArtista:        \t";
    getline (cin, ArtistaBrano);
    cout <<"\nGenere:         \t";
    cin >> GenereBrano;
    
    nuovo->titolo == TitoloBrano;
    nuovo->artista = ArtistaBrano;
    nuovo->genere = GenereBrano;
    nuovo->next = testa;
    testa = nuovo;
    attuali ++;
    cout <<"\n == Brano Inserito! == \n\n";
    system ("pause");
    system ("cls");
    } // fine Aggiungi

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [C++] Problemi con l'acquisizione di stringhe da tastiera

    Originariamente inviato da luna88
    ma in questo caso no...
    Perché? Cosa fa? Non inserisce il titolo nella lista per caso?

    (p.s. è un suggerimento)
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Prova a mettere un cin.ignore() dopo ogni getline

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Ho provato con cin.ignore() ma nulla.... il problema è questo:

    == OUTPUT ==

    Titolo: La cura

    Artista: (salta)

    Genere: (me lo fa inserire)

    Secondo me lui in Titolo accetta "La" e "Cura" lo vede come Artista.... per questo passa

    direttamente a genere... non so se mi sono spiegata... uff.... possibile che non c'è un modo

    per bypassare gli spazi?

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Basta aggiungere '\n' come ultimo argomento di getline:
    codice:
    getline(cin,titoloBrano,'\n')

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Ottimo suggerimento Dark867 funziona quasi.... mi spiego.... mi fa inserire il titolo e l'artista con gli spazi e mi da l'ok ma quando vado a visualizzare l'elenco dei brani inseriti alla voce "Titolo" non appare nulla mentre ad Artista si (nome e cognome con spazi).... sembra come se Titolo non me lo aggiorna....

    Non capisco...

    Vi posto il codice con la funzione Visualizza() cosi lo testate...

    codice:
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    struct brano
    {
    string titolo;
    string artista;
    string genere;
    brano* next;
    };
    
    brano* testa;
    int attuali = 0;
    
    //Prototipi di funzioni
    void  Titolo();
    void  Menu();
    void  Aggiungi (brano* &);
    void  Visualizza(brano*);
    void  Ordina();
    void  Trova();
    void  Elimina();
    void  SvuotaLista();
    
    //funzione principale
    int main()
    {
    
    Titolo ();	
    int risp;	
    brano* testa = NULL;
    
    do {
      do {
    Menu ();
    cout <<"\n\nDigita la tua scelta: ";
    cin >> risp;
    } while (risp <1 || risp > 6);
    switch (risp)
    {
    case 1:
         Aggiungi(testa);
         break;
    case 2:
         Visualizza(testa);
    	 break;
    case 3:
         Ordina;
    	 break;
    case 4:
         Trova;
    	 break;
    case 5:
         Elimina;
    	 break;
    case 6:
    cout <<"\nArrivederci! :) \n\n";
    	 break;
    }
    } while (risp != 6);
    return 0;
    }
    
    // funzioni in dettaglio
    
    void Titolo ()
    {
    cout <<"\n\t LettoreMusicale.cpp   di   Silvia D'Ercole e Vito Montesano    \n";
    cout <<"\n\t Esame di: ALGORITMI E PROGRAMMAZIONE (prof. Vittorio Moriggia) \n";
    cout <<"\n\t                == GESTIONE DI FILE MUSICALI ==                 \n";
     
    } // fine Titolo
    
    void Menu()
    {
    cout <<"\n\t Contatti attualmente presenti: " << attuali << endl;	
    cout <<"\n\n\t            == Menu'==           \n";
    cout <<"\n\t [1]: Aggiungi un nuovo brano      \n";
    cout <<"\n\t [2]: Visualizza i brani inseriti  \n";
    cout <<"\n\t [3]: Ordina brani                 \n";
    cout <<"\n\t [4]: Trova un brano               \n";
    cout <<"\n\t [5]: Elimina brano                \n";
    cout <<"\n\t [6]: Esci\n";
    } // fine Menu
    
    void Aggiungi (brano* &testa)
    {
    	
    string TitoloBrano;
    string ArtistaBrano;
    string GenereBrano;
    
    brano* nuovo;
    nuovo = new brano;
    
    cout <<"\n\n == NUOVO ELEMENTO == \n";
    
    cout <<"\nTitolo brano:   \t";
    cin >> TitoloBrano;
    getline(cin, TitoloBrano, '\n');
    cout <<"\nArtista:        \t";
    getline (cin, ArtistaBrano, '\n');
    cout <<"\nGenere:         \t";
    cin >> GenereBrano;
    
    nuovo->titolo == TitoloBrano;
    nuovo->artista = ArtistaBrano;
    nuovo->genere = GenereBrano;
    nuovo->next = testa;
    testa = nuovo;
    attuali ++;
    cout <<"\n == Brano Inserito! == \n\n";
    system ("pause");
    system ("cls");
    } // fine Aggiungi
    
    void Visualizza (brano* testa)
    {
    if (!testa)
    {
    cout <<" \n\n LISTA VUOTA!!! \n\n";
    system ("pause");
    system ("cls");
    return;}	
    	
    brano* prossimo;	
    prossimo = testa;
    
      cout <<"\n\n        == ELENCO BRANI == \n\n";
      
    do { 		
      cout <<"\n\n  Titolo:  " << prossimo->titolo  << " \n";
      cout <<"\n\n  Artista: " << prossimo->artista << " \n";
      cout <<"\n\n  Genere:  " << prossimo->genere  << " \n";
      cout <<"\n _________________________________" << " \n\n";
      
      prossimo = prossimo->next;
    } while (prossimo != NULL);
    
    system ("pause");
    system ("cls");
    } // fine Visualizza

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156

    Re: [C++] Problemi con l'acquisizione di stringhe da tastiera

    occhio a:
    Originariamente inviato da luna88

    codice:
    nuovo->titolo == TitoloBrano;
    credo che tu volessi fare
    codice:
    nuovo->titolo = TitoloBrano;

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Eccolo li il problema!!! Grande zucchino!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Altra cosa strana....

    se in Titolo scrivo "La cura" in Visualizza() mi appare solo "cura"...salta la prima parola.... mentre Artista funziona alla perfezione... why!??!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Ho risolto con fflush(stdin) ... ma solo in parte.... ora mi visualizza tutto bene... ma la funzione trova è saltata.... uff....

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.