Título: Problema guardando 2d arrays en binarios Publicado por: julianbesso1 en 5 Agosto 2014, 05:08 am Hola a todos. Nuevamente con un problema. Me pidieron que realice una sopa de letras que brinde la posibilidad de guardar la partida para retomar en otro momento. Es aquí donde fallo. No estoy muy seguro del código correspondiente a write y read (líneas 203 y 251 respectivamente)
Código
No entiendo por qué aparecen lineas horizontales dentro del código... Qué debo hacer para hacerlo visible? Gracias de antemano. Saludos! Ahora si :) Título: Re: Problema guardando 2d arrays en binarios Publicado por: eferion en 5 Agosto 2014, 11:20 am No entiendo por qué aparecen lineas horizontales dentro del código... Qué debo hacer para hacerlo visible? Para que el código aparezca "correcto" tienes que añadirle a la etiqueta "code" el lenguaje empleado: code=cpp -> C++ code=c -> C ... Si la etiquetas la dejas como "code" a secas al código se le da una interpretación que puede no ser la correcta... en tu caso [ s ] se está interpretando como texto tachado, por lo que te tacha todo lo que se encuentra entre esa etiqueta y la de cierre... que como no hay te tacha hasta el final del código. No estoy muy seguro del código correspondiente a write y read Código
Si sopa es un array bidimiensional... tu quieres sobreescribir dicho array al completo... ¿por qué accedes a sopa[0]? Si pretendes modificar "sopa"... el puntero que debes pasar es "sopa"... no "sopa[0]". Además, "20*20*sizeof(sopa)"... si sopa es un array de 20*20... entonces esa expresión es equivalente a "20*20*20*20*sizeof(char)"... y creo que no es tu intención leer semejante cantidad de información. Tienes que tener en cuenta que de la forma en la que has declarado el array, el compilador sabe en todo momento el tamaño de esa variable... que serán 400 bytes. Dicho esto aquí tienes dos opciones: Opción 1: Código
Opción 2: Código
Yo, personalmente, prefiero la primera opción ya que si te da por cambiar el tamaño del array y te olvides de cambiar esta otra línea vas a tener errores en el código. El resto de lecturas y escrituras presentan los mismos problemas. Un saludo. Título: Re: Problema guardando 2d arrays en binarios Publicado por: julianbesso1 en 5 Agosto 2014, 14:50 pm Todavía estoy con problemas. Eferion, respecto a tus respuestas:
1) Código 2) Código
Ambas devuelven el mismo error: no matching function for call to 'std::basic_fstream<char>::read(char[20][20], unsigned int)' Intenté agregar (char *) de modo que quede de la siguiente manera: Código
Código
Lo cual "funciona", pero cuando quiero acceder al binario, me imprime en pantalla caracteres extraños... Voy a seguir probando. Gracias! Lo conseguí agregando la bandera ios::in y ios::out respectivamente. No sabía que eran cruciales para que pudiera escribirse o leerse un archivo. Quedó de la siguiente manera: Código
El guardado sale perfecto, pero cuando ejecuto la opción de guardar dentro del programa este se detiene y me tira el cuadro de diálogo "sopa.exe ha dejado de funcionar" y tengo que cerrar... Alguna solución para eso? Ya casi estoy :) Gracias!!! Título: Re: Problema guardando 2d arrays en binarios Publicado por: Swain en 5 Agosto 2014, 15:59 pm Solo por comentar, es necesario usar in, out cuando no especificas a la hora de crear el puntero
para leer ifstream para guardar ofstream, si lo creas fstream necesitas especificar a la hora de hacer el open si vas a guardar o leer. No te serviria guardar TODO dentro de una estructura y pasarla como binario al archivo y despues leerla?? algo como Código
Título: Re: Problema guardando 2d arrays en binarios Publicado por: eferion en 5 Agosto 2014, 16:30 pm Código
¿por qué motivo tratas palabras_found como si fuese un puntero? Me da que no terminas de entender el significado y funcionamiento de los punteros. En este caso concreto, "palabras_found" no es puntero, y dado que la función "write" necesita un puntero, lo que tienes que facilitarle a la función es la posición de memoria donde se encuentra "palabras_found", es decir: Código
Lo que tu estabas almacenando antes en el fichero era guarrería... además le estabas dando al sistema operativo motivos más que suficientes para que matase tu programa por acceder a memoria que no le corresponde. |