Ayuda en programa con ficheros!

Iniciado por Juan821, 25 Junio 2014, 20:01 PM

0 Miembros y 3 Visitantes están viendo este tema.

Juan821

bueno ya coregido todo lo que me dijeron quiero mostrarles una cosa haber si me pueden ayudar estudie lo de los strings como me dijeron y saque un programa mas de conocimiento lo hice con logica pero quiero que me digan lo del patcher y un pequeño error que me sale primero les mostrare el codigo
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <fstream>
using namespace std;
int main()
{
int f,i=1,s=1,w,r;
char x[1];
system ("cls");
printf("\n <===============Su categoria es Historia===============> \n");
printf("\n Presione cualquier tecla para escoger su pregunta \n");
cin.ignore();
ofstream res;
res.open("D:\\res.txt",ofstream::out | ofstream::trunc);
ifstream resp;
resp.open("D:\\res.txt");
ifstream narchivos;
narchivos.open("D:\\prueba.txt");
ifstream enarchivos;
enarchivos.open("D:\\prueba.txt");
ifstream archivos;
archivos.open("D:\\prueba.txt");
while (!enarchivos.eof())
{
i++;
f=enarchivos.get();
}
enarchivos.close();
i=i-2;
while (s<=i)
{
f=narchivos.get();
s++;
}
i=i-1;
s=1;
while (s<=i)
{
r=archivos.get();

if (r =='\n')
{
printf ("\n");
}
else printf("%c",r);
s++;
}
enarchivos.close();
scanf("%s",x);
res<<x<<endl;
w=resp.get();
if (w==f)
{
printf("Su respuesta fue correcta felicitaciones!");
cin.ignore();

}
else
{
printf("Respuesta incorrecta es el turno del otro jugador");
cin.ignore();
}
res.close();
resp.close();
enarchivos.close();
narchivos.close();
archivos.close();
cin.ignore();
system("del c:\\res.txt");
return 0;

}


Cuando termino el programa me dice que la variable x la corrompieron (ya lo depure mucho tiempo) y el archivo que quiero que se me borre no se borra :'( y lo otro es lo del path yo quiero que en en vez del prueba.txt pongo la f que esta como variable como hago para que me lea lo que hay dentro de la variable y no que se abra el archivo con nombre f esto dentro del patcher si pueden ayudarme muchas gracias por adelantado

eferion

Cita de: Juan821 en 30 Junio 2014, 02:54 AM
Cuando termino el programa me dice que la variable x la corrompieron (ya lo depure mucho tiempo)

Una cadena de caracteres, al estilo C que es la que estás usando, se componen de una secuencia de caracteres que termina con el carácter nulo '\0'. Esto quiere decir que si quieres almacenar un texto de 30 caracteres, necesitas un buffer que tamaño igual o superior a 31.

En tu caso tienes char x[1] ... es decir, estás definiendo un arreglo de caracteres de tamaño 1... lo que te permite almacenar, bien un caracter suelto, bien una cadena vacía (solo el carácter nulo). Al intentar almacenar una cadena de caracteres en x, tu código escribirá fuera del espacio reservado para X, por eso te sale el mensaje de memoria corrupta. Debes modificar ese '1' para que tenga un valor igual o superior a "LongitudMaximaDelTextoAAlmacenar+1"

La opción b es usar la clase string y olvidarse de tener que gestionar las cadenas de caracteres a tan bajo nivel.

Cita de: Juan821 en 30 Junio 2014, 02:54 AM
el archivo que quiero que se me borre no se borra

Deberías fijarte un poco más en tu código:


res.open("D:\\res.txt",ofstream::out | ofstream::trunc);

// ...

system("del c:\\res.txt");


Es el problema de tener valores constantes "a pelo" en el código, sobretodo cuando están repetidos...

pista: Fíjate en los dos path y busca diferencias.

Cita de: Juan821 en 30 Junio 2014, 02:54 AM
yo quiero que en en vez del prueba.txt pongo la f que esta como variable como hago para que me lea lo que hay dentro de la variable y no que se abra el archivo con nombre f

Deberías aprender a expresarte un poco mejor.

¿Pretendes no tener que poner el path "a pelo" al abrir los ficheros?

¿Quieres usar 'f' para elegir que fichero tienes que abrir?
Esto no lo vas a poder hacer porque f es de tipo int, no es un string.

¿Quieres que el contenido del fichero se vuelque en 'f'?
Recuerda que 'f' solo puede guardar un entero por vez.

¿Es otra cosa?
Tendrás que replantear la forma de expresar tu problema.

Juan821

#12
Uyyy si muchas gracias bien ahora debo adivinar como poner el path para que se abra desde la ruta donde esta el archivo cpp esto se puede hacer?

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón