hola, buenas.
estoy intentando usar las librerias iostream y fstream para guardar y leer partidas. el caso es que tengo echa una función para ello, pero cada vez que la abro el programa se cierra.
int borrar_partida(int linea){ fstream borrar("guardados2.txt",ios::in | ios::out); string nombre[10], personaje[10]; int nivel[10],monedas[10],vidas[10]; while (1==1) { borrar >> nombre[0] >> nivel[0] >> monedas[0] >> vidas[0] >> personaje[0] >> nombre[1] >> nivel[1] >> monedas[1] >> vidas[1]>> personaje[1] >> nombre[2] >> nivel[2] >> monedas[2] >> vidas[2]>> personaje[2] >> nombre[3] >> nivel[3] >> monedas[3] >> vidas[3]>> personaje[3] >> nombre[4] >> nivel[4] >> monedas[4] >> vidas[4]>> personaje[4] >> nombre[5] >> nivel[5] >> monedas[5] >> vidas[5]>> personaje[5] >> nombre[6] >> nivel[6] >> monedas[6] >> vidas[6]>> personaje[6] >> nombre[7] >> nivel[7] >> monedas[7] >> vidas[7]>> personaje[7] >> nombre[8] >> nivel[8] >> monedas[8] >> vidas[8]>> personaje[8] >> nombre[9] >> nivel[9] >> monedas[9] >> vidas[9]>> personaje[9]; for (int f=0;f<linea;f++ ){ borrar<< nombre[f] << " " << nivel[f] << " " << monedas[f] << " " << vidas[f] << " " << personaje[f] << "\n";} for (int f=linea+1;f<10;f++ ){ borrar << nombre[f] << " " << nivel[f] << " " << monedas[f] << " " << vidas[f] << " " << personaje[f] << "\n";} borrar.close(); return 0; } }
el archivo tiene 10 lineas con esa estructura y esta funcion lo que deberia hacer es eliminar una linea del archivo.
es lo primero que hago en c++, lo siento por los errores tontos o las ***** monumentales que pueda haber. XD
no entiendo por que pasa eso, si alguno de vosotros sabe el porque le agradeceria que me lo dijera.
Editado: El uso de palabras inadecuadas podría resultar ofensivo para ciertos usuarios y va en contra de las Normas de la Comunidad, antes de volver a postear por favor revíselas.| AORV
usa 2 fstream
Creo que lo que intentas hacer es, primero leer el archivo entero y luego escribir las partes que te interesan, saltandote la línea a borrar, no? Si es eso, ten en cuenta que al final de la lectura, borrar apunta al final del archivo! Lo suyo es que hagas borrar.close (); y crees otro fstream (o uses el mismo borrar reabriéndolo) antes de los for. También ten en cuenta que si linea>10 va a petar seguro! Aparte de eso creo que la idea es buena. Debería funcionar.
Hay muchas maneras de hacerlo, como usando lseek para volver al principio, pero desde mi punto de vista personal yo lo que haría sería tener 2 fstream: un ifstream para la entrada y un ofstream para la salida. El tipo fstream a secas casi nunca lo he usado, siempre uso esos dos subtipos dependiendo de lo que quiera hacer.
Saludos.
PD: a qué viene lo del while (1==1) con un return dentro? xD
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
No es más facil, desplazarse
No es más facil, desplazarse hacia la línea a borrar en vez de cargar el archivo entero?
fseek(NombreArchivo,0,SEEK_END);
Restale a SEEK_END los caracteres que correspondan a la ultima línea.
En cuanto al error, es posible que hayas sobrepasado el tamaño del array?.
Mi creacciónes particulares:
http://www.scenebeta.com/noticia/la-serpiente
http://www.scenebeta.com/node/22535
No es tan facil
Ya que cada línea probablemente sería variable. Es decir, que habría que recorrer el fichero entero para saber donde empieza la línea x.
Aunque sí que podría usar el fseek para volver al principio del archivo antes de comenzar la escritura. Como digo más arriba es una de las opciones, aunque personalmente yo me decanto por usar dos fstream (1 ifstream y 1 ofstream), que es más simple xD
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.