[c++]lettura numeri da file e scrittura in vettore

franbisc
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

int main()
{

    ifstream numbers("/home/fra/Scrivania/numeri.txt");
    const int DIM=100;
    int vettore[DIM];

    while(numbers.good())
    {

        for (int i=0;i<=DIM;i++) {
            numbers.get(c);
            vettore[i]=c;
        }
    }

    return 0;
}

L'esercizio chiede di leggere da file una sequenza di numeri, di lunghezza
arbitraria, fino alla fine del file,e inserire i numeri in un vettore v → n = v.size().
Io credo di fare un po' di confusione con i comandi per leggere da file..in particolare il comando
numbers.get(c)
in pratica cosa fa?Legge carattere dopo carattere fino alla fine del file?Ma come fa ad andare avanti ad ogni carattere letto senza ciclo for?E poi come posso risalire ad un singolo carattere letto(ad esempio esiste numbers[c]?)
Come correggereste il codice?

Risposte
apatriarca
In C++ i file vengono interpretati come un "flusso" di byte che vengono letti uno dopo l'altro. Quando una certa parte del file viene letta si passa quindi ai caratteri successivi. Nel caso dei file esistono in realtà funzioni per spostarsi al suo interno in modo casuale, ma questa astrazione vale anche per oggetti che non sono necessariamente file. La stessa astrazione è per esempio usata anche per l'input da tastiera.
Stai comunque usando la funzione sbagliata. get restituisce un singolo carattere ma tu volevi leggere numeri. Per farlo puoi usare l'operatore >> che usi già per l'input da tastiera. Cioè:
numbers >> vettore[i];

I tuoi due cicli andrebbero uniti, oppure dovresti usare un vector al posto di un array ed eliminare il ciclo interno.

franbisc
Allora,ho apportato alcune modifiche:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()  {

    ifstream text ("/home/fra/Scrivania/vettore/text.txt");
    vector<int> text;
    int i=0;

    while(text.good())   {
        text>>vector;

    }

    for(i=0;i<10;i++)  {
        cout<<vector[i] <<endl;
    }
   return 0;
}


Ma non ho capito a quali 2 cicli ti riferisci(ho usato solo un ciclo for).E inoltre come faccio a non usare l'array e sostituirlo con un vettore(il vettore non è un array?)

apatriarca
Mi riferivo all'uso di std::vector che non è un array. Hai due cicli nella tua applicazione.. while(numbers.good()) { .. } è il ciclo esterno.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.