Salve, sto scrivendo un programma che legge degli interi da un file di testo, copia solo i valori di posizione pari in una struttura dati e li stampa.
Per fare questo, ho creato le funzioni LeggiFile e StampaVideo.
Il problema sorge, in particolare, nel while della prima funzione; infatti non riesco a trovare un modo affinché il loop si arresti una volta arrivato all'ultimo numero inserito del file, e non vada oltre contando anche l'end of line (almeno credo sia questa la ragione)…
Infatti mi succede che se inserisco un numero dispari di valori nel file, vengano stampati a video TUTTI i numeri in posizione pari + uno 0, mai inserito da me inizialmente (credo corrispondente, appunto, all'end of line)…oltre poi ad essere errato il NUMERO di valori presenti nel vettore, j, che risulta maggiorato di 1…
mentre se inserisco un numero pari di valori nel file, vengono stampati a video TUTTI i numeri in posizione pari ed il numero di valori del vettore è corretto .E in questo caso va tutto bene…
Qualcuno potrebbe aiutarmi a capire come fare per arrestare il while senza che vada oltre l'ultimo numero inserito del file? in modo che il valore di j, il numero di valori della struttura, sia effettivamente corretto in tutti i casi?
come posso fare?
Grazie mille in anticipo e scusate, sto studiando da poco questi argomenti…
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
fstream Myfile;
int i=1;
int j=0;
int l[100];
int b[100];
string risposta;
void LeggiFile(int* a)
{
//equivalente di ofstream
//scrittura dati
Myfile.open("Salvatore.txt", ios::out);
if (Myfile.is_open())
{
Myfile<<"1 2 1 4 5 6 1 2 3 12 3 -12 12 10 11"<<endl;
Myfile.close();
}
//equivalente di ifstream
//lettura dati
//copia i valori nelle posizioni pari nella struttura dati b[100]
Myfile.open("Salvatore.txt", ios::in);
if (Myfile.is_open())
{
while (!Myfile.eof () && i<100)
{
Myfile>>l[i];
if((i)%2==0)
{
b[j]=l[i];
j++;
}
i++;
}
}
Myfile.close();
}
void StampaVideo(int*a)
{
cout<<"Dammi il nome del file da leggere completo di estensione:"<<endl;
cin>>risposta;
cout<<"Il numero di valori presenti nel vettore e': "<<j<<endl;
cout<<"Ecco i valori del vettore:"<<endl;
for(i=0;i<j;i++)
{
cout<<b[i]<<" "<<endl;
}
}
int main()
{
int* p;
LeggiFile(p);
StampaVideo(p);
}