Autor
|
Tema: Problema con fstream en c++ (Leído 4,134 veces)
|
anamnesis_92
Desconectado
Mensajes: 17
|
Buenas a todos, estoy haciendo un juego y una clase me da error, y no se a que se debe; la función debería leer de un archivo números de 5 cifras, después almacenarlos en una matriz de 4 columnas por un numero de filas que es el primer numero del archivo. A ver si me podéis ayudar a arreglar el código. #include <iostream> #include <fstream> using namespace std;
class matriz { public: int filas; char cadena[5]; int **m;
void leer(char* s) { //abrimos ifstream fe; fe.open(s,ios::in); if(!fe) { cout<<"fallo"<<endl; } //leemos //con la primera linea sacamos las filas fe.getline(cadena,6); //para pasar la cadena a un int filas=(cadena[0]-48)*10000+(cadena[1]-48)*1000+(cadena[2]-48)*100+(cadena[3]-48)*10+(cadena[4]-48); //iniciamos la matriz m=new int *[filas]; for(int i=0;i<=filas;i++) { m[i]=new int[4]; } //seguimos leyendo for(int i=0;i<filas;i++) { for(int j=0;j<4;j++) { fe.getline(cadena,6); m[i][j]=(cadena[0]-48)*10000+(cadena[1]-48)*1000+(cadena[2]-48)*100+(cadena[3]-48)*10+(cadena[4]-48);
} } fe.close(); }
void destruir() { for(int i=0;i<=filas;i++) { delete [] m[i]; } delete [] m; }
};
int main() { matriz matriz1; matriz1.leer("mapa1.txt"); matriz1.destruir(); return 0; }
Gracias a todos por adelantado.
|
|
|
En línea
|
|
|
|
Kropt32
Desconectado
Mensajes: 34
|
Si en una función vas a pasarle una cadena constante, pon el argumento como constante también 'const char*'...
void leer(const char* s)
|
|
|
En línea
|
En las pistolas, fíjense, a cada disparo el cañon recula, como asustado por lo que acaba de hacer.
|
|
|
adastra
Endless Learner
Ex-Staff
Desconectado
Mensajes: 885
http://thehackerway.com/
|
Cual es el error que te esta dando? mandanos una traza o algo...
|
|
|
En línea
|
|
|
|
anamnesis_92
Desconectado
Mensajes: 17
|
Lo primero gracias por responder; he utilizado const y ya compila pero colocando un cout<<m[j] en la linea 38 compruebo que no hace los que esperaba, asi que sigo sin saber donde esta el fallo....
|
|
|
En línea
|
|
|
|
Kropt32
Desconectado
Mensajes: 34
|
En el tratamiento de error al abrir el fichero, muestras "Fallo", sin embargo sigues leyendo, pon un return al menos.
Linea: for(int i=0;i<=filas;i++)
Esta linea cambiala hasta '< filas', porque si le pones '<= filas', le estás obligando que se meta en una posición de memoria del array no asignada, la última posición de un array es 'tamaño - 1'.
Al final, dentro de la función main(), lees el fichero y a pesar de no saber si se ha leido bien, porque das por hecho que se lee bien, destruyes la clase. y esto provoca un fallo de segmentación porque la matriz no se ha creado.
Es lo que puedo decirte de vista rápida. Pureba a solucionar eso...
El paso a int hay una función que te lo hace todo muy bonito, atoi()
|
|
« Última modificación: 9 Febrero 2012, 14:30 pm por Kropt32 »
|
En línea
|
En las pistolas, fíjense, a cada disparo el cañon recula, como asustado por lo que acaba de hacer.
|
|
|
anamnesis_92
Desconectado
Mensajes: 17
|
Muchisimas gracias por contestar; y aunque no me salen mas fallos sigue sin hacerlo bien. De todas formas gracias.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con eof, de fstream
Programación C/C++
|
arcanu
|
0
|
2,820
|
22 Noviembre 2010, 05:31 am
por arcanu
|
|
|
Practicando con fstream
Programación C/C++
|
anonimo12121
|
3
|
3,027
|
3 Abril 2011, 17:17 pm
por anonimo12121
|
|
|
fstream.h
Programación C/C++
|
laephy
|
1
|
6,371
|
13 Abril 2011, 23:40 pm
por ssaammuu
|
|
|
Programa usando libreria fstream
Programación C/C++
|
@ron
|
0
|
5,059
|
14 Abril 2011, 03:01 am
por @ron
|
|
|
Explicacion acerca de fstream
Programación C/C++
|
bash
|
1
|
2,293
|
24 Mayo 2013, 14:30 pm
por bash
|
|