UTNianos

Versión completa: ayuda con programacion en C
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
buenas, mi problema es el siguiente: estoy haciendo un ejercicio sencillo de programacion en C, pidiendo valores enteros y guardandolos en un archivo .txt. hasta ahi todo bien, pero cuando voy a abrir el .txt creado no salen los numeros que ingrese sino una direccion seguramente de memoria o algo asi , creo que es un problema de la codificacion. si alguien me puede dar una mano le agradeceria mucho.

saludos
Subí el código así te podemos ayudar =)
Pensá que el código en principio lee el archivo, y las variables que encuentra se supone que lo guarda en el stack/pila de la memoria, por lo que puede ser que cuando imprimas por pantalla te encuentres con la dirección en memoria, en lugar del valor en sí.

Deberías jugar en con el tema de las referencias, por ahí es la falta de un asterisco antes de la variable.
ahi va el codigo

#include <stdio.h>

int main()

{
FILE *arch;
int v;

arch = fopen ("prueba.txt","w");

printf("ingrese un valor: ");
scanf("%d",&v);

while (v!=0)

{
fwrite(&v,sizeof(int),1,arch);
printf("ingrese un valor: ");
scanf("%d",&v);
}

fclose(arch);
return 0;
}
El tema es que lo estas escribiendo en binario... Vos esperas ver en el archivo la representación ascii de los valores, pero estas escribiendo la representación en memoria de los valores!

Creo que tenes que usar la función itoa (integer to ascii).
esta mal esto: fwrite(&v,sizeof(int),1,arch);

tiene que ser: fwrite(v,"%d /n",1,arch);//o lago asi era, no tnego mas linuz como para haer man de esta funcion, cualquier cosa fijate en mis post que tenes muchos ejemplos de mis ejercicios, tenes subido de estos tipos.

Off-topic:
Probá declararlo como puntero al comienzo...
int *v;

Para luego usarlo sin la desreferencia:
scanf("Numero: %d", v);



Por ahí es una pelotudez lo que digo y no cambia nada, pero a lo mejor resulta...
Proba con fprintf en vez de fwrite.
ahi hice el codigo para leer lo que hay en el archivo y va bien, me retorna los numeros que ingreso y si actualizo sigue leyendo bien. creo que si quiero abrir el .txt desde bloc de notas o similares y que aparezcan los numeros y no las direcciones ya es meterse en un tema que no se mi me conviene , x ahi me la estoy complicando al pedo.

lo estoy haciendo mas que nada para cuando tenga que hacer ejercicios de archivos, cuando te dicen que dan un archivo con por ej listado de alumnos (alumnos.dat) y quiera trabajar con eso
Si queres hacer eso en un .txt, usa fprintf
Fijate que vas a ver los numeros sin problemas. Meti un salto de linea para que quede mas prolijo.
Otra cosa, trata de siempre poner la verificación de que fopen no te devuelva NULL. Muchas veces el programa se ejecuta bien y despues resulta que anduvo todo para el orti. Te vas a ahorrar bastantes problemas ;)

El programa te va a quedar asi:


#include <stdio.h>

int main()

{
FILE *arch;
int v;

arch = fopen ("prueba.txt","w");

if (arch==NULL)
{
printf("\n\nError al abrir el archivo");
}

else
{
printf("ingrese un valor: ");
scanf("%d",&v);

while (v!=0)
{
fprintf(arch,"%d\n",v);
printf("ingrese un valor: ");
scanf("%d",&v);

}
fclose(arch);
}

return 0;
}

(23-08-2014 18:32)Amadeo escribió: [ -> ]Proba con fprintf en vez de fwrite.

Es cierto, esta es la posta.

(23-08-2014 18:37)sebainge escribió: [ -> ]ahi hice el codigo para leer lo que hay en el archivo y va bien, me retorna los numeros que ingreso y si actualizo sigue leyendo bien. creo que si quiero abrir el .txt desde bloc de notas o similares y que aparezcan los numeros y no las direcciones ya es meterse en un tema que no se mi me conviene , x ahi me la estoy complicando al pedo.

Ojo, no estas viendo direcciones. Tu programa escribe la representación en memoria del valor en el archivo, tal cual. Después el notepad lo interpreta como caracter, y ahí se va todo a la mierda.

(23-08-2014 18:37)sebainge escribió: [ -> ]lo estoy haciendo mas que nada para cuando tenga que hacer ejercicios de archivos, cuando te dicen que dan un archivo con por ej listado de alumnos (alumnos.dat) y quiera trabajar con eso

Practicá las dos cosas, leer y escribir en ascii, y leer y escribir en binario.
Cuando quieras laburar con binarios, usas archivos .dat, y las funciones fwrite y fread. La sintaxis de fwrite tal como vos la usaste esta bien. En tu caso, para fread seria:


fread (&buffer,sizeof(int),1,arch);
printf("%d, buffer);

Donde en buffer vas guardando numero a numero que vas levantando e imprimiendolo en pantalla.

Si quisieras ver el archivo.dat, tenes que usar algun programita especial. Yo no recuerdo bien que editor usaba para esto en informática, si queres me fijo y te aviso
(23-08-2014 18:50)Santi Aguito escribió: [ -> ]Si queres hacer eso en un .txt, usa fprintf
Fijate que vas a ver los numeros sin problemas. Meti un salto de linea para que quede mas prolijo.
Otra cosa, trata de siempre poner la verificación de que fopen no te devuelva NULL. Muchas veces el programa se ejecuta bien y despues resulta que anduvo todo para el orti. Te vas a ahorrar bastantes problemas ;)

El programa te va a quedar asi:


#include <stdio.h>

int main()

{
FILE *arch;
int v;

arch = fopen ("prueba.txt","w");

if (arch==NULL)
{
printf("\n\nError al abrir el archivo");
}

else
{
printf("ingrese un valor: ");
scanf("%d",&v);

while (v!=0)
{
fprintf(arch,"%d\n",v);
printf("ingrese un valor: ");
scanf("%d",&v);

}
fclose(arch);
}

return 0;
}




genial santi! funco barbaro.

gracias a todos x su tiempo muchachos. suerte!
No es nada =) cualquier duda que tengas consulta.

Saludos
URLs de referencia