Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/05/2012, 04:55
Javieer-G
 
Fecha de Ingreso: diciembre-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 0
Respuesta: Problema con fwrite

Gracias Sam! No sé muy bien si era eso o no por que lo solucioné ayer y recién acabo de mirarlo, pero puede ser. Cambié eso entre otras cosas.

Respecto a lo de depuración... ¿No te resulta muy tedioso tener que poner printf's? Yo es que estoy acostumbrado a seguir las variables con un depurador, con el Visual C++, y ahora que me he unido a linux me encuentro desamparado jajaja

Por cierto, pongo el programa arreglado por si alguno tiene curiosidad:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main()
  5. {
  6. FILE *pf;
  7.  
  8. struct ficha{
  9. int clave;
  10. char nombre[50];
  11. float nota;};
  12.  
  13. int i=0, j=0, n=0;
  14. char c;
  15. struct ficha registro; /*Crea una estructura del tipo ficha llamada registro*/
  16.  
  17. if ((pf = fopen("registro.txt", "a+")) == NULL)
  18. {puts("Error al abrir el fichero");} /*Abre el fichero <<registro.txt>>, donde grabaremos los datos*/
  19.  
  20. puts("¿Que desea hacer?");
  21. puts("A -> Añadir");
  22. puts("L -> Listar");
  23. c=getchar();
  24. /*******************************AÑADIR DATOS*******************************/
  25. if(c == 'A')
  26. {
  27. puts("Cuantos registros quieres introducir?: "); /*Pide tantos registros como se quieran introducir*/
  28. scanf("%d", &n);
  29.  
  30. for(j=0; j<n; j++){ /*El bucle pide una tanda de datos, los guarda en registro (struct ficha) y los graba en el fichero*/
  31. puts("Introduzca los datos del alumno");
  32. puts("Clave: ");
  33. scanf("%d", &registro.clave);
  34.  
  35. puts("Nota: ");
  36. scanf("%f", &registro.nota);
  37.  
  38. puts("Nombre: ");
  39. gets(registro.nombre);
  40.  
  41. if(fwrite(&registro, sizeof(registro), 1, pf) != 1) perror("escribiendo el fichero"); /*Graba los datos en el fichero*/
  42.  
  43. }
  44. exit(1);}
  45.  
  46. /*******************************LEER DATOS*******************************/
  47. if(c == 'L'){
  48. fseek(pf, i*sizeof(registro), 0); /*Desplaza el puntero de L/E al inicio del fichero*/
  49. fread(&registro, sizeof(registro), 1, pf); /*Concepto de "lectura adelantada". Guarda la primera estructura en registro (struct ficha)*/
  50.  
  51. while(!feof(pf)){ /*Hasta que no llegue a la marca de fin de fichero no cesa el bucle*/
  52. i++;
  53. printf("\nNOMBRE: %s, CLAVE: %d, NOTA: %0.2f \n", registro.nombre, registro.clave, registro.nota); /*Imprime por pantalla los datos de registro*/
  54. fseek(pf, i*sizeof(registro), 0); /*Avanza el cursor L/E a la siguiente estructura*/
  55. fread(&registro, sizeof(registro), 1, pf); /*Lee dichos datos y, sobrescribiendo, los guarda en registro*/
  56. }
  57. puts("\n");
  58.  
  59. exit(1);}
  60.  
  61. return 0;
  62. }