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

    [C++] -Problemi con getline(cin, string)

    Ho usato cerca ma non ho trovato nulla.
    Sto creando un programma che dovrebbe inserire in un file.txt il nome della società, e in un altro i dettagli della società. Siccome nome e descrizione posso contenere spazi, ho dovuto usare getline(cin, stringa). L'unico problema è che mi salta il primo getline, ossia quello del nome società. Per di più, nel secondo getline non mi prende il prima carattere (se inserisco "agricola spa", in dati_societa.txt visualizzo "gricola spa"). Vi posto il codice così potete aiutarmi! Grazie
    codice:
    void inserisci()
    {
        ofstream newName, newDet;
        newName.open("nomi_societa.txt", ios::out | ios::app);
        newDet.open("dati_societa.txt", ios::out | ios::app);
        string name, details;
        cout << endl << "Inserisci il nome della nuova societa': ";
        getline(cin, name);
        cout << "Inserisci i dati della nuova societa': ";
        getline(cin, details);    
        newName << name << "\n";
        newDet << details << "\n";
        cout << endl << "Scrittura eseguita con successo" << endl;
        newName.close();
        newDet.close();
    }

  2. #2
    Il codice eseguito da sé non dà alcun problema. Per caso prima hai eseguito delle cin per leggere dei numeri?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Si ma in in un'altra procedura. Praticamente ho stampato a video un menu, ho fatto inserire il numero con cin (sarebbe la scelta) e poi uno switch che in base alla scelta fa eseguire procedure/funzioni diverse. Dici che è questo il problema? Come lo sistemo?
    Grazie

  4. #4
    Il problema è che gli operatori di input formattato (i >>, in sostanza) lasciano il ritorno a capo finale nel buffer di lettura, ma per loro non è un problema, dato che alla successiva lettura ignorano automaticamente tutto il whitespace che incontrano prima dei caratteri "veri".

    La getline, invece, fa parte della famiglia delle funzioni di output non formattato, che invece legge finché non trova il delimitatore, che nel tuo caso è il newline. Il problema è che nel buffer rimane questo newline "spurio" lasciato giù dalle letture precedenti con gli operatori >>.

    La soluzione è svuotare il buffer subito dopo aver fatto le letture con i >>, cosa che si può fare facilmente con
    codice:
    cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    istruzione che ignora tutti i caratteri rimasti nel buffer fino al primo newline (richiede #include <limits>).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Grazie mille Mitaly, ora funziona e non da problemi! Buona giornata!
    C++ for( ; ; )


    [C++ forever]

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.