Salve a tutti! Questo è il mio primo post in un forum di programmazione e premetto che muovo adesso i primi passi nel mondo C++, quindi mi scuso in anticipo se sbaglierò nell'esporre i problemi o farò domande banali/stupide.
Il problema che vi sottopongo è il seguente:
Ecco cosa dovrebbe fare il programmino che avevo in mente(premesso che è banale, li faccio principalmente per tenermi in esercizio per il mio esame di programmazione):
- Contare quanti dati sono presenti nel file;
-Creare un array dinamico;
-Inizializare suddetto array a zero;
-Stampare su standard output gli zeri per confermarmi che è stato inizializzato;
-Prendere i numeri da file e copiarli nell'array;
-Stampare in fine questi numeri su standard output;
Io ho agito creando varie funzioni e non ho riscontrato problemi fino a quando non vado a stampare i valori che dovrebbero essere salvati nel mio array dinamico. Il risultato che ottengo è una seconda fila di zeri. Ora, io ho provato vari modi per vedere in che punto fallisce il programma, ma confesso che non credo di essere in grado di trovare da solo il punto dove ho sbagliato.
Adesso di seguito provo a postare il codice che sono riuscito a creare:
# include <iostream>
# include <fstream>
# include <cmath>
using namespace std;
void verificaInput();
void contaNum(int&);
void prendiNum(double[], int);
void stampaNum();
ifstream file_entrata;
ofstream file_uscita;
int dimensione;
double *contenitore;
int main(int narg, char * * args, char ** env)
{
file_entrata.open(args[1]);
verificaInput();
file_uscita.open(args[2]);
contaNum(dimensione);
cout<<"L'array avrà quindi "<< dimensione <<" slots!"<<endl;
contenitore = new double [dimensione];
cout<<"Inizializzo a zero l'array"<<endl;
for(int i=0; i<dimensione; i++)
contenitore [i] = 0;
stampaNum();
prendiNum(contenitore, dimensione);
stampaNum();
return 0;
}
//////////////////////////////verificaInput/////////////////////////////////
void verificaInput()
{
if (file_entrata.fail())
{
cout<<endl;
cout<< "Mi dispiace, non trovo il file di INPUT!"<<endl;
cout<<"Adesso termino il Programma!"<<endl;
cout<<endl;
exit(000);
}
}
/////////////////////////////////contaNum///////////////////////////////////
void contaNum(int &i)
{
double b;
i=0;
while(!file_entrata.eof())
{
if (!file_entrata) {cout<<"Non funziona!"<<endl;break;}
file_entrata>>b;
if(file_entrata) i++; //ho messo questo if else perché al momento non
else break; // so come evitare che il ciclo mi conti due volte l'ultimo numero
} //che legge dal file di input.
cout<<endl;
cout<<"Ho contato "<< i <<" numeri!"<<endl;
}
//////////////////////////////stampaNum/////////////////////////////////////
void stampaNum()
{
cout<<"Stampo il risultato."<<endl;
for(int i=0; i<dimensione; i++)
cout << contenitore[i]<<" ";
cout<<endl;
}
/////////////////////////////////prendiNum/////////////////////////////////
void prendiNum(double contenitore[], int dimensione)
{
for (int i=0; i<dimensione;i++)
file_entrata>>contenitore[i];
}
Questo è quanto ho fatto per adesso, non riesco proprio a capire perché la funzione "prentiNum" non funzione(scusate il gioco di parole). Visto che è la prima esperienza con un array dinamico spero che sappiate dirmi se il mio è un errore sintattico o proprio concettuale.
In ogni caso grazie in anticipo, mi raccomando non risparmiatevi con le critiche, sono qui per imparare.
Saluti
snake87gr