Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/03/2014, 21:18
TriN
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error con el buffer en archivo de texto

Hola vosk gracias por tu pronta repuesta llena de observaciones constructivas, estuve varios dias sin conectarme y he seguido al pie de la letra tus indicaciones y respondo tus preguntas el formato en que tengo el archivo .Dat es puro texto con un salto de linea luego de cada campo es eso lo que preguntabas ?

Una duda vosk, en varios campos uso el %d como en edad y codigo pero igual al hacer fprint me lo lee como cadena de texto, como dices lo del retorno del fscanf, es decir como se cuando me leera entero es decir cuando me devolvera el fscanf 2, no se si me explique, por otro lado si colocara como condicion en el if de la linea 2,
Código C:
Ver original
  1. if(fscanf(archivo, "%s", temp) == 2) {
el numero 2 como condicion para leer la cadena de texto debo tener dos argumentos ejem: %d %f.

Luego me preguntas que trabaje con estructuras y correctamente, guardo la estructura directamente al archivo de esta forma:

Código C:
Ver original
  1. printf("Cuantos atletas desea agregar \n");
  2. scanf("%d",&c);
  3.  
  4.     for (i=0;i<c;i++)
  5.     {
  6.     system("cls");
  7.     puts("Nombre ");
  8.     scanf("%s",&dat[i].nombre);
  9.     puts("Apellido ");
  10.     scanf("%s",&dat[i].apellido);
  11.     puts("Edad ");
  12.     scanf("%d",&dat[i].edad);
  13.     puts("Deporte ");
  14.     scanf("%s",&dat[i].deporte);
  15.     puts("Codigo ");
  16.     scanf("%d",&dat[i].codigo);
  17.    fprintf(archivo,"%s\n%s\n%d\n%s\n%d\n\n",dat[i].nombre,dat[i].apellido,dat[i].edad,dat[i].deporte,dat[i].codigo);
  18.    }
  19.    fclose(archivo);
  20. }
Gracias por tu ayuda y asi me ha quedado el codigo luego de seguir tus instrucciones:
Código C:
Ver original
  1. void leer(void)
  2. {
  3.      
  4.      FILE *archivo;
  5.      char temp[80];
  6.      int a;
  7.      int x,y,con,b;
  8.      x=1;
  9.      y=2;
  10.      b=2;
  11.      con=0;
  12.      
  13.    
  14.  
  15.      archivo=fopen("Lista.dat","r");
  16.      if (archivo==NULL)
  17.      {
  18.                        printf("ERROR");
  19.                        }
  20.                        
  21.                        else
  22.                        {
  23.                            system("cls");
  24.                            printf("NOMBRE\t\t");
  25.                             printf("APELLIDO\t\t");
  26.                              printf("EDAD\t\t");
  27.                               printf("DEPORTE\t\t");
  28.                                printf("CODIGO\t\t\n");
  29.                                  
  30.                                      
  31.                        }
  32.                        while(1)
  33.                        {
  34.                                if (fscanf(archivo,"%s",temp)==1)
  35.                                {
  36.                                con++;
  37.                                gotoxy(x,y);printf("%s ",temp);
  38.                                x+=16 ;
  39.                                                 if(con==5)
  40.                                              {
  41.                                              printf("\n");
  42.                                              con=0;
  43.                                              x+=1;
  44.                                              y+=b;
  45.  
  46.                                              }
  47.                                }
  48.                                
  49.                                      else
  50.                                      {
  51.                                          if(feof(archivo))
  52.                                          {
  53.                                                           printf("\n\n\nFINAL DEL ARCHIVO");
  54.                                                           }
  55.                                                           else if (ferror(archivo))
  56.                                                           {
  57.                                                                printf("Error de acceso");
  58.                                                                }
  59.                                                                else
  60.                                                                {
  61.                                                                    printf("Error inesperado");
  62.                                                                    }
  63.                                      break;
  64.                                      }
  65.                                
  66.                        }
  67.  
  68.                        getch();
  69.                   fclose(archivo);
  70.                
  71.              
  72.    
  73. }
y otra pregunta hay que aprovechar, xD xq rayos se imprimia un campo de mas ? al colocar el codigo de la primera manera?