[C++] Lettura interi da file

di il
23 risposte

[C++] Lettura interi da file

Sono tornato alla carica. Un esercizio mi chiede di leggere da un file che contiene una serie di interi (l'esempio da: 3 1 3 5 9 5 7 eof) e caricarli in un vettore.

Io ho scritto questo codice (non da errori) ma durante l'esecuzione non accade nulla (il prompt rimane nero). Cosa ho sbagliato? Grazie!
#include <iostream>
#include <fstream>
using namespace std;



int main()
{
    int n, i;
    fstream file1;
    int Vett[100];
    int stop;

    file1.open("file1.in", ios::in); //apro file1 in lettura
    ifstream input("file1.in", ios::in);
    i=0;
    while(!file1.eof())
    {
        input >> Vett[i];
        i++;
        
    }
    file1.close();
    stop = i;
    for (i=0; i<=stop; i++)
    {
        cout << Vett[i] << endl;
    }

23 Risposte

  • Re: [C++] Lettura interi da file

    In quel modo non cambierà mai il risultato di file1.eof()... stai usando un'altro stream dentro al ciclo
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i;
        fstream file1;
        int Vett[100];
        int stop;
        ifstream input("dati.in", ios::in);
        i=0;
        while(!input.eof())
        {
            cout<<"salvo la "<<i<<" posizione\n";
            input >> Vett[i];
            i++;
        }
        file1.close();
        stop = i;
        for (i=0; i<stop; i++)
        {
            cout << Vett[i] << endl;
        }
        return 0;
    }
    
  • Re: [C++] Lettura interi da file

    Ho provato quello che mi hai suggerito tu e da vita ad un loop infinito. Dove sbaglio?
  • Re: [C++] Lettura interi da file

    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i;
        int Vett[100];
        int stop;
        ifstream input("file1.in", ios::in);
        i=0;
        while(!input.eof())
        {
            cout<<"salvo la "<<i<<" posizione\n";
            input >> Vett[i];
            i++;
        }
        input.close();
        stop = i;
        for (i=0; i<stop; i++)
        {
            cout << Vett[i] << endl;
        }
        return 0;
    }
    
    
    Sopra cambiato il nome file da dati.in a file1.in ,quello usato da te
    Assicurati che il file non sia vuoto , bisognerebbe tenerne conto

    Non è stato fatto il controllo sulla effettiva esistenza del file in esecuzione , il loop avviene perchè non hai aperto il file correttamente , non esiste nel tuo progetto dati.in. Dovresti gestire questa evenienza e segnalare sulla console
  • Re: [C++] Lettura interi da file

    Il file da trattare è nella stessa cartella del salvataggio del programma, si chiama file.in e non è vuoto.

    Avevo adattato già prima il tuo codice alle mie condizioni ma nonostante questo ricade in un loop infinito. Scusami, sii paziente, sono alle prime armi con questo argomento e non riesco ad uscirne.
  • Re: [C++] Lettura interi da file

    Prova questo :
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i;
        int Vett[100];
        int stop;
        ifstream input("dati.in", ios::in);
        if(input.is_open())
        {
    
            i=0;
            while(!input.eof())
            {
                cout<<"salvo la "<<i<<" posizione\n";
                input >> Vett[i];
                i++;
            }
            input.close();
            stop = i;
            for (i=0; i<stop; i++)
            {
                cout << Vett[i] << endl;
            }
        }
        else
            cout<<"Errore nell'apertura del file";
        return 0;
    }
    
    
  • Re: [C++] Lettura interi da file

    Stessa identica esecuzione: ciclo infinito nel prompt (Salvo la n posizione all'infinito)
  • Re: [C++] Lettura interi da file

    Ok , prova questo :
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
        int i,stop;
        int Vett[100];
        ifstream input("dati.in", ios::in);
        if(input.is_open())
        {
    
            i=0;
            if(input.peek()!=EOF)
            {
                while(!input.eof())
                {
                    cout<<"salvo la "<<i<<" posizione\n";
                    input >> Vett[i];
                    i++;
                }
                input.close();
                stop = i;
                for (i=0; i<stop; i++)
                {
                    cout << Vett[i] << endl;
                }
            }
            else
                cout<<"Il file e' vuoto";
        }
        else
            cout<<"Errore nell'apertura del file";
        return 0;
    }
    
  • Re: [C++] Lettura interi da file

    Ci risiamo
  • Re: [C++] Lettura interi da file

    Ultima prova se non va non so come aiutarti
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i,limit,stop;
        int Vett[100];
        ifstream input("dati.in");
        if(input.is_open())
        {
    
            i=limit=0;
            if(input.peek()!=EOF)
            {
                while(!input.eof())
                {
    
                    if(limit>100)
                    {
                        cout<<"Ciclo infinito errore sconosciuto";
                        return 1;
                    }
                    cout<<"salvo la "<<i<<" posizione\n";
                    input >> Vett[i];
                    i++;
                    limit++;
                }
                input.close();
                stop = i;
                for (i=0; i<stop; i++)
                {
                    cout << Vett[i] << endl;
                }
            }
            else
                wcout<<"Il file e' vuoto";
        }
        else
            cout<<"Errore nell'apertura del file";
        return 0;
    }
    
    
  • Re: [C++] Lettura interi da file

    Ciclo infinito errore sconosciuto, purtroppo. Non riesco proprio ad immaginare dove possa essere l'errore
  • Re: [C++] Lettura interi da file

    Sicuro che nel file non hai messo dei caratteri per sbaglio ? eof non vedi metterlo tu ,lo sai ?
  • Re: [C++] Lettura interi da file

    Ci mostri il contenuto esatto del file?

    Sicuramente non saranno solo numeri interi ...
  • Re: [C++] Lettura interi da file

    Mi era scappata una virgola alla fine Ora funziona! Scusate, colpa mia Ora procedo con l'esercizio, nel caso mi faccio risentire
  • Re: [C++] Lettura interi da file

    Eccomi di nuovo! L'esercizio continua chiedendo in input un n inter e di costruire una matrice nxn. Se n è pari chiede di porre tutti gli elementi della matrice a 0 tranne quelli sulle diagonali, che vanno messi a 1.

    Io ho fatto così(c'è anche la parte della richiesta precedente, già risolta);
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i, limit, stop, n;
        int j, k, somma, resto;
        int coeff;
        int Vett[100];
    
    
    
        ifstream input("file1.in");
        if(input.is_open())
        {
    
            i=0;
            if(input.peek()!=EOF)
            {
                while(!input.eof())
                {
                    input >> Vett[i];
                    i++;
                }
                input.close();
    
            }
            else
                cout<<"Il file e' vuoto";
        }
        else
            cout<<"Errore nell'apertura del file";
    
    
    
        cout << "Inserisci un numero intero";
        cin >> n;
        int mat[n][n];
        j = 0;
        k = 0;
        coeff = n - 1;
        if (n>0)
        {
            resto = n % 2;
            if (resto == 0)
            {
                for (k=0; k<n; k++)
                {
                    for (j=0; j<n; j++)
                    {
                    mat[j][k]=0;
                    }
                }
                for (k=0; k<n; k++)
                {
                    for (j=0; j<n; j++)
                    {
                        if (j=k)
                            mat[j][k]=1;
                        somma = j + k -1;
                        if (somma=coeff)
                            mat[j][k]=1;
    
                    }
                }
            }
            cout << mat[0][0] << endl;
         
        }
        else
            cout << "Numero inserito errato";
        
    }
    
    Dopo aver inserito n=4, ad esempio, il programma non da risultati. Come mai?
Devi accedere o registrarti per scrivere nel forum
23 risposte