Salve ragazzi. Ho già letto diverse discussioni qui sul forum ma non mi hanno aiutato a trovare l'errore nel mio programma. In pratica, la stampa della matrice dà valori sballati. Vi posto il codice:
#include <iostream>
#include <fstream>
#include <string.h>
#include <math.h>
using namespace std;
bool read_file (int **&mat, int &dim, string path, ifstream &file);
void dealloc (int **&mat, int dim);
int main () {
ifstream file;
int **mat;
int dim=0;
string path;
bool error;
do {
error=read_file(mat, dim, path, file);
if (error) {
cout << "Percorso errato. ";
}
}while (error);
dealloc(mat, dim);
return 0;
}
bool read_file(int **&mat, int &dim, string path, ifstream &file) {
cout << "Inserisci il nome del percorso:\n";
cin >> path;
file.open(path);
if (!file) {
return true;
}
int tmp=0;
while (!file.eof()) {
file >> tmp;
dim++;
}
dim= sqrt(dim);
cout << "L'ordine di grandezza e': " << dim << ".\n";
file.seekg(0, file.beg);
int i, j;
mat= new int *[dim];
for (i=0; i<dim; i++) {
mat[i]=new int [dim];
}
for (i=0; i<dim; i++) {
for (j=0; j<dim; j++) {
file >> mat[i][j];
cout << mat[i][j] << " ";
}
cout << endl;
}
return false;
file.close();
}
void dealloc(int **&mat, int dim) {
for (int i=0; i<dim; i++) {
delete [] mat[i];
}
delete [] mat;
}
Teoricamente, il file da cui vado a leggere è un file di testo del tipo:
1 44 338 3 38 9 48 3 38 37 2 1 484 3 38 2
Sono sicuro che la soluzione del problema sia sotto i miei occhi ma è da oggi che continuo a cercare di capire quale sia . Sono (quasi) sicuro che il problema non sia perché il cursore va oltre l'eof, ma altre motivazioni non mi vengono. Ho anche provato ad allocare staticamente la matrice ma mi restituiva lo stesso problema, talvolta restituendo una matrice di soli zero. Un saluto e un ringraziamento a chiunque mi aiuterà!
PS: la matrice è quadrata.