Si tengo una matriz que saco de un archivo y quiero retornarla ¿como lo hago? ya que el return quedaría dentro de los ciclos for terminando la función antes de tiempo. así:
char crear_mundo (char**M, int f, int c, istream& a, int i, int j)
{
for (i = 0; i < f; i++)
{
for (j = 0; j < c; j++)
{
a>>M[i][j];
}
}
delete [] M;
}
int main()
{
int i,j,f,c;
ifstream a("archivo.txt");
a>>f;
a>>c;
char **M = new char* [f];
for (i = 0; i < f; i++)
{
M[i] = new char[c];
}
crear_mundo (M, f, c, a, i, j);
return 0;
}
Porque si la retorno dentro del ciclo solo imprimiria el primer caracter del archivo, y lo que ocurre es que después debo modificar la matriz (cosa que no puedo hacer si está dentro del ciclo). Agradezco su ayuda y estoy atento a respuestas!!!!!!
Que pena, dentro de la función main() va:
cout << crear_mundo (M, f, c, a, i, j);
No tienes que retornar nada, los cambios que se hagan en la función cambiarán la matriz del main. Compruebalo tú mismo.
Ojo, esto solo ocurre con los vectores y matrices. No intentes hacerlo con una variable o con un objeto.
Pero cuando intento imprimir en pantalla la matriz dentro de la función main, me compila pero despues aparece error.
Eso se debe a que la matriz la destruyes al final de la función "crear_mundo", a partir de ahí ya no puedes utilizar los datos leídos del archivo (no tiene sentido).
Siguiendo lo comentado por amchacon también debes eliminar los parámetros "i" y "j", en su lugar hay que declararlos como variables locales.
La función termina así:
char crear_mundo(char** M, int f, int c, istream& a)
{
for (int i = 0; i != f; i++)
for (int j = 0; j != c; j++)
a >> M[i][j];
}
Un saludo
Pero entonces ¿como podría imprimir la matriz o modificarla dentro de la función main? Porque intento hacerlo así:
cout << M;
En main() pero el programa corre y luego sale error aún destruyendo la función al final de main().
Cita de: SirLancelot53 en 24 Enero 2014, 02:26 AMPero entonces ¿como podría imprimir la matriz o modificarla dentro de la función main?
Honestamente no entiendo.
La matriz la modificas en la función "crear_mundo": en ella sobrescribes cada uno de sus elementos con un valor leído del stream "a", modificar la matriz en la función main no conlleva diferencia alguna y basta con utilizar dos bucles.
Y para imprimirla la operación es similar:
int main()
{
ifstream a("archivo.txt");
int f, c;
a >> f;
a >> c;
char **M = new char* [f];
for (int i = 0; i < f; i++)
M[i] = new char[c];
crear_mundo (M, f, c, a);
// Imprimir la matriz
for (int i = 0; i != f; ++i){
for (int j = 0; j != c; ++j)
cout << " " << M[i][j];
cout << endl;
}
return 0;
}
Por ultimo antes de que la función main termine se debe liberar la memoria utilizada por la matriz mediante el operador new.
Un saludo
Gracias, ahora ya entiendo pensé que no eran necesarios los ciclos; muchas gracias.