Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] problema getline

    Ho il seguente problema con c++, in pratica per far leggere a una stringa le parole separate da uno spazio uso la funzione getline() ma mi da i seguenti errori se lo uso con i campi di una coda, in output la prima volta che esegue ciclio non ho problemi dalla seconda invece, nn so xkè mi stampa i due cout uno dopo l'altro senza farmi leggere la prima variabile, lo so mi sono spiegato male.. vi posto il codice.
    codice:
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    struct cod {
        string A;
        string b;
        string c;
        cod* next;
    };
    cod* primo;
    int main()
    { 
      int a=1;
      cod* p;
      primo = NULL;
      while (a != 0) {  
        p = new cod;
        cout<<"Inserisci autore:  ";
        getline(cin, p->A);
        cout<<"Inserisci titolo:  ";
        getline(cin, p->b);
        cout<<"Inserisci descrizione:  ";
        getline(cin, p->c);
        p->next = primo;
        primo = p;
        cout<<"Inserisci 0 per terminare l'inserimento: ";
        cin>>a;
      }  
      p = primo;
      while (p != NULL) {
          cout<<"autore: "<<p->A<<endl;
          cout<<"titolo: "<<p->b<<endl;      
          cout<<"descrizione: "<<p->c<<endl;      
          p = p->next;
      }    
      system("PAUSE");	
      return 0;
    }
    questo è l'output
    codice:
    Inserisci autore:  uno uno
    Inserisci titolo:  uno
    Inserisci descrizione:  uno
    Inserisci 0 per terminare l'inserimento: 4
    Inserisci autore:  Inserisci titolo:  due
    Inserisci descrizione:  due
    Inserisci 0 per terminare l'inserimento: 0
    autore:
    titolo: due
    descrizione: due
    autore: uno uno
    titolo: uno
    descrizione: uno
    come vedete nel secondo inserimento nn mi fa leggere l'autore... mi sapete dire xkè??? grazie in anticipo.
    Mio sito!
    Il computer non è una macchina intelligente che aiuta le persone stupide, anzi è una macchina stupida che funziona solo nelle mani delle persone intelligenti. (Umberto Eco)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dopo

    cin>>a;

    scrivi

    cin.clear();
    cin.ignore(1, '\n');

  3. #3
    Perfetto ora funziona grazie.... in teoria il primo cin.clear(); dovrebbe pulire il buffer della tastiera e il secondo ignora il carattere di fine riga '\n' ma nn capisco l'1 iniziale. E' cosi o sbaglio?
    Mio sito!
    Il computer non è una macchina intelligente che aiuta le persone stupide, anzi è una macchina stupida che funziona solo nelle mani delle persone intelligenti. (Umberto Eco)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    ... o sbagli ...

    Il clear resetta la situazione di (eventuale) errore dell'input. L'ignore, ignora (!) 1 carattere \n che risulta in piu' dopo l'input del valore numerico ...

  5. #5
    Grazie per la spiegazione

    p.s. Mi sono anche corretto
    Mio sito!
    Il computer non è una macchina intelligente che aiuta le persone stupide, anzi è una macchina stupida che funziona solo nelle mani delle persone intelligenti. (Umberto Eco)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.