Non legge il file

di il
3 risposte

Non legge il file

Ciao a tutti
devo fare un programma che calcolo un determinato valore a partire da numeri nel file.. essendo il file a quattro colonne, devo prendere solo la quarta ma quando scrivo il codice mi da errore. Potete aiutarmi?

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

double CalcolaS0(vector<double> sigma)
{
    double sigma,S0;
    int N;
    cout << " inserisci le dimensioni del vettore: " << endl;
    cin >> N;
    for(int i = 1; i < N ;i++ )
    CalcolaS0 = 1/(sigma[i]*sigma[i]);
     return (CalcolaS0);
}

int main (){

    string fileName;
    cout << "Inserisci il nome del file : " << endl;
    cin >> fileName;

    ifstream ifile(fileName);
    double v1;
    double v2;
    double v0=0;
    double sigma =0;

    vector<double> C4;

    while (ifile(v0 >> v1 >> v2 >> sigma)) {
        
    vector<double> S0;

    for(int i=0;i<C4.size();i+=4)
    { S0 += C4[i]; }

    cout << "S0 vale : " << (CalcolaS0(S0)) << endl;
    
    return 0;


}

3 Risposte

  • Re: Non legge il file

    Nella riga while mi da tutto errore
  • Re: Non legge il file

    Ciao
    siccome ci sono diversi errori nel codice ti spiego come li puoi correggere.
    un primo errore lo hai fatto nella definizione del file
     ifstream ifile(fileName);
    qui devi mettere l'indicazione della modalità del file per esempio ios::in
    poi un altro errore sta nella While di lettura
    perchè non devi mettere la lettura del file ma la condizione di finchè il ciclo deve ripetersi
    di solito per i file si usa fare:
    
    ilfile.get(dato da leggere) 
    while (!ilfile.eof())
    {
    // qui metti tutto ciò che bisogna fare con il dato letto
    ilfile.get(dato da leggere)
    }
    

    ti spiego cosa ho fatto:
    la prima
    ilfile.get(dato da leggere) 
    serve per prendere il dato che deve essere trattato all'interno della while
    l'ho messo fuori perchè essendo il primo dato la while non avrebbe saputo con quale carattere cominciare!
    l'altra get l'ho messa alla fine per far si che il dato cambiasse e poter effettuare il ciclo.
    dato da leggere può essere una variabile di qualunque tipo
    se devi leggere più campi contemporaneamente ti consiglio di fare una struttura e far leggere il campo struttura
    spero di esserti stato di aiuto
  • Re: Non legge il file

    Non serve inizializzare con ios:in, lo fa già di default.
    Gli errori di compilazione sono dovuti a problemi di sintassi nella funzione e nel fatto che non chiudi il ciclo while.
    Con qualche aggiustamento, si poteva fare anche con l'operatore di stream.
    
        if(!ifile.is_open()){
            cout<<"errore\n";
            return 1;
        }
    
        while (!ifile.eof() && (ifile>>v0 >> v1 >> v2 >> sigma)) {
    
        C4.push_back(sigma);
        }
        for(double x : C4)
            cout<<x<<"\n";
    
Devi accedere o registrarti per scrivere nel forum
3 risposte