Domanda

Ho questa funzione per leggere tutti gli ints dal file. Il problema è quando leggo le lettere, innesco una nuova riga e cerco sempre 1 e non fino alla fine della riga. Come posso scrivere meglio questa funzione?

int v;
    while (!in.eof())
    {
        while (in >> v)
            cout << v << " ";

        cout << endl;
        if (in.eof())
            break;
        in.clear();
        in.seekg(1, ios::cur);
        int a;
        a=0;
    }
È stato utile?

Soluzione

Se il tuo file è composto da soli ints separati da newline di spazi bianchi (compresi), questo dovrebbe essere sufficiente.

while( in >> v )
{
    // do something with v
}

Dopo il file, se in.fail () è falso e in.eof () è vero, hai raggiunto la fine del file senza errori di formattazione. Altrimenti si è verificato un errore durante la lettura di un int.

Se ricevi input non validi e vuoi recuperarli, devi capire come vuoi recuperare. Se vuoi saltare fino alla fine della riga e ricominciare ad analizzare, puoi usare qualcosa del genere.

in.clear();
in.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

Altri suggerimenti

Primo problema, il codice sopra riportato non si ferma alla fine della riga.
L'operatore > > () ignora " Caratteri dello spazio bianco " che include il nuovo carattere di riga.

Come si può scrivere meglio?
È difficile dirlo senza sapere cosa stai cercando di fare con i numeri e qual è il formato di input del file!

Ma se lo scrivessi lo scriverei senza usare queste righe:

    if (in.eof())
            break;
    in.clear();
    in.seekg(1, ios::cur);

Quando si elabora un file di testo formattato è raro vedere l'uso di seek ().

Assumign:
   Il file contiene solo numeri.
   Vuoi leggere tutti i numeri in un contenitore.

std::vector<int>    data;

std::copy(  std::istream_iterator<int>(in),  // An iterator from current point
            std::istream_iterator<int>(),    // To end of file.
            std::inserter(data)              // Destination (insert into data)
         );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top