Foros del Web » Programación para mayores de 30 ;) » C/C++ »

fscanf en fichero secuencial..

Estas en el tema de fscanf en fichero secuencial.. en el foro de C/C++ en Foros del Web. Hola chicos, Tengo el siguiente problema ..no se como leer un fichero secuencial con fscanf lo he intentado pero no lo hace ..,escribir si me ...
  #1 (permalink)  
Antiguo 21/02/2011, 06:45
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
fscanf en fichero secuencial..

Hola chicos,

Tengo el siguiente problema ..no se como leer un fichero secuencial con fscanf
lo he intentado pero no lo hace ..,escribir si me lo hace pero leer no me lo lee correctamente que hago mal¿?,aparte lo ideal seria que visualizara un registro y luego haga una pausa y luego al pulsar intro me visualize el siguiente registro hasta que sea EOF.
como podria hacerlo¿?..
Muchas gracias a todos de antemano..

Código C:
Ver original
  1. /*crear el fichero secuencial vendedor.dat*/
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<ctype.h>
  5. #include<string.h>
  6.  
  7. struct vendedor{
  8. char apellido1[15];
  9. char apellido2[15];
  10. char nombre[15];
  11. char sexo;
  12. float sueldo_base;
  13. float ventas;
  14. };
  15.  
  16. int main(void){
  17. FILE *pf;
  18. struct vendedor vend;
  19. char mas='s';
  20. pf=fopen("vendedor.dat","w");
  21. do{
  22. printf("Introduce valores a los campos del registros:\n");
  23.     printf("iNtroduce el primer apellido:\n");
  24.     scanf("%s",vend.apellido1);
  25.     fflush(stdin);
  26.     printf("Introduce un segundo apellido:\n");
  27.     scanf("%s",vend.apellido2);
  28.     fflush(stdin);
  29.     printf("Introduce el nombre:\n");
  30.     scanf("%s",vend.nombre);
  31.     fflush(stdin);
  32.        
  33.         printf("Introduce el sexo solo 'M' o 'F':\n");
  34.         do{
  35.         scanf("%c",&vend.sexo);
  36.         vend.sexo=toupper(vend.sexo);
  37.         fflush(stdin);
  38.         }while(vend.sexo!='M'&&vend.sexo!='F');
  39.     printf("Introduce el sueldo base:\n");
  40.     scanf("%f",&vend.sueldo_base);
  41.     fflush(stdin);
  42.     printf("iNtroduce ventas:\n");
  43.     scanf("%f",&vend.ventas);
  44.     fflush(stdin);
  45.     fprintf(pf,"Apellido1:%s ",vend.apellido1);
  46.     fprintf(pf,"Apellido2:%s ",vend.apellido2);
  47.     fprintf(pf,"Nombre:%s ",vend.nombre);
  48.     fprintf(pf,"Sexo:%c ",&vend.sexo);
  49.     fprintf(pf,"sueldobase:%f ",&vend.sueldo_base);
  50.     fprintf(pf,"ventas:%f \n",&vend.ventas);
  51.    
  52.     printf("\ncrear un nuevo registro? (si->S o no->N)\n");
  53.     do{
  54.     scanf("%c",&mas);
  55.     mas=toupper(mas);
  56.     fflush(stdin);
  57.     }while(mas!='S' && mas!='N');
  58. }while(mas=='S');
  59. fclose(pf);
  60.     pf=fopen("vendedor.dat","rb");
  61.     fscanf(pf,"Apellido1:%s ",vend.apellido1);
  62.     fscanf(pf,"Apellido2:%s ",vend.apellido2);
  63.     fscanf(pf,"Nombre:%s ",vend.nombre);
  64.     fscanf(pf,"Sexo:%c ",&vend.sexo);
  65.     fscanf(pf,"sueldobase:%f ",&vend.sueldo_base);
  66.     fscanf(pf,"ventas:%f \n",&vend.ventas);
  67.     while(!feof(pf)){
  68.       printf("\nPrimer Apellido: %s",vend.apellido1);
  69.       printf("\nSegundo Apellido: %s",vend.apellido2);
  70.       printf("\nNombre: %s",vend.nombre);
  71.       printf("\nSexo : %c",vend.sexo);
  72.       printf("\nSueldo Base: %f",vend.sueldo_base);
  73.       printf("\nVentas: %f",vend.ventas);
  74.  
  75.     fscanf(pf,"Apellido1:%s ",vend.apellido1);
  76.     fscanf(pf,"Apellido2:%s ",vend.apellido2);
  77.     fscanf(pf,"Nombre:%s ",vend.nombre);
  78.     fscanf(pf,"Sexo:%c ",&vend.sexo);
  79.     fscanf(pf,"sueldo base:%f ",&vend.sueldo_base);
  80.     fscanf(pf,"ventas:%f \n",&vend.ventas);
  81.     }
  82.  
  83. fclose(pf);
  84. }

Última edición por roser24; 21/02/2011 a las 07:00
  #2 (permalink)  
Antiguo 22/02/2011, 11:17
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: fscanf en fichero secuencial..

A primera vista, dos cosas:

1. Cuando abres el fichero para leerlo lo haces en modo "rb", que corresponde a lectura de archivo binario, pero lo has creado como archivo de texto. Para leerlo, ábrelo con "r".

2, Al leer el archivo, en la parte del formato, pon solamente el especificador de formato, no pongas el nombre del campo que estás leyendo.

Etiquetas: fichero, fscanf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:37.