elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Incrementando en fichero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Incrementando en fichero  (Leído 1,642 veces)
Risketo

Desconectado Desconectado

Mensajes: 37



Ver Perfil
Incrementando en fichero
« en: 19 Agosto 2012, 01:44 am »

Aquí vengo con otra duda, bueno mas que duda un problema que no se solucionar...
Creo un fichero en el cual escribo lo que quiera, pero, quiero que cada vez que se ejecute el programa y se escriba se ponga un identificador en dicho texto y que empiece desde el numero 1 y se vaya incrementando cada vez que se escribe, para cuando abra el fichero ponga 1 y la frase, 2 y la otra frase etc. Lo traté de hacer con fread pero pasa del 1 al 3 al 7 etc... La verdad es que no se donde estará el error, ni si es un error tonto o una payasada.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int main(){
  5. FILE *fichero;
  6. unsigned int ultimo=1;
  7. unsigned int *ptr;
  8. char texto[50];
  9.  
  10. if ((fichero = fopen ("fread.lst","rt")) != NULL){
  11.  
  12. fread (&ptr, sizeof (ultimo),1,fichero);
  13.  
  14. while (! feof(fichero)){
  15. ptr=&ultimo;
  16. fread (&ptr, sizeof (ultimo),1,fichero);
  17.  
  18. ultimo++;
  19. }
  20. }
  21.  
  22. fichero = fopen ("fread.lst","a+");
  23. fprintf (fichero,"%d",ultimo);
  24. fgets (texto,49,stdin);
  25. fprintf(fichero,"\n%s", texto);
  26.  
  27. fclose (fichero);
  28.  
  29. return 0;
  30. }
  31.  

Muchas gracias por vuestro tiempo.


En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Incrementando en fichero
« Respuesta #1 en: 19 Agosto 2012, 02:31 am »

no entiendo por que en los fread() le pasas &ptr. ptr es un puntero a int, el cual no inicializas ya sea diciendole que apunte a alguna variable o reservandole memoria, y encima lo pasas por referencia con lo que a fread() le estas pasando la direccion de memoria del puntero :huh:

luego dentro del while tampoco entiendo cual es la finalidad de ptr=&ultimo, o directamente para que usas el puntero ptr. ademas, por cada caracter que lees, sumas 1 a "ultimo", cuando por cada linea deberias sumar 1. si la estructura del fichero siempre es 1 numero, 1 espacio, y luego una frase, podrias leer caracter por caracter, y si este es igual a '\n' sumar 1 a "ultimo".

ademas que abres el fichero 2 veces, podrias abrirlo solo 1 vez en modo lectura y escritura y con fseek() cuando lo necesites te situas al final de este.

en fin, que no me aclaro mucho con tu codigo... quizas soy yo asi que esperemos a que alguien mas conteste porque seguramente se me hayan pasado varias cosas.

un saludo!

edito: tenia ganas de programar algo y me puse con tu ejercicio. te dejo el code por si te sirve. este incluye la frase que se le pase por linea de comandos entre "" en el archivo con el numero que le toque al inicio.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char** argv) {
  5.  
  6. char fichero[]="prueba.txt", aux;
  7. unsigned int num=0, i;
  8. FILE *f;
  9.  
  10. //comprobaciones de error
  11. if (argc != 2) {
  12. printf("MODO DE USO: %s \"frase\"\n", argv[0]);
  13. exit(0);
  14. }
  15.  
  16. if (!(f=fopen(fichero, "r+"))) {
  17. printf("ERROR: No se pudo abrir %s.\n", fichero);
  18. if (!(f=fopen(fichero, "w"))) {
  19. printf("ERROR: No se pudo crear %s.\n", fichero);
  20. exit(1);
  21. } else printf("Fichero %s creado.\n", fichero);
  22. }
  23.  
  24. //lineas totales en el archivo
  25. do {
  26. i=fread(&aux, sizeof(char), 1, f);
  27. if (aux == '\n') num++;
  28. } while (i > 0);
  29. if (num == 0) num++;
  30.  
  31. //escribimos el numero y la frase
  32. fprintf(f, "%u %s\n", num, argv[1]);
  33.  
  34. fclose(f);
  35. return 0;
  36. }
  37.  


« Última modificación: 19 Agosto 2012, 20:28 pm por xiruko » En línea

Risketo

Desconectado Desconectado

Mensajes: 37



Ver Perfil
Re: Incrementando en fichero
« Respuesta #2 en: 20 Agosto 2012, 00:51 am »

Lo del puntero la verdad es que no se si estará muy bien lo que hice, hace nada que empece a verlos.
Simplemente quería que fread lea el valor de la variable "ultimo" y le sume +1, para tener identificadas las frases.

Muchas gracias por poner tu código, no conocía lo de: modo de uso "nombre programa" + frase.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
fichero .fpt
Bases de Datos
kakashi20 0 1,746 Último mensaje 28 Mayo 2012, 23:47 pm
por kakashi20
fichero .NET
.NET (C#, VB.NET, ASP)
andaluz 2 1,857 Último mensaje 1 Junio 2012, 00:03 am
por andaluz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines