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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con bucle y funcion feof
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con bucle y funcion feof  (Leído 3,573 veces)
Franquieli

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problema con bucle y funcion feof
« en: 24 Julio 2012, 03:05 am »

Hola, estoy haciendo un programa de prueba en el cual creo un archivo binario, despues lo leo y hago unos calculos.El programa es el siguiente:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    struct datos{
        char nombre[30];
        unsigned int nota1;
        unsigned int nota2;
    };
    struct datos alumnos[50];
    int n;
    printf("Ingrese la cantidad de alumnos del curso:\n");
    scanf("%d",&n);
    int i;
    for(i=0;i<n;i++)
    {
        printf("\nIngrese el apellido del alumno %d:\n",i);
        scanf("%s",alumnos.nombre);
        fflush(stdin);
        printf("\nIngrese la nota del modulo 1 del alumno %d:\n",i);
        scanf("%u",&alumnos.nota1);
        fflush(stdin);
        printf("\nIngrese la nota del modulo 2 del alumno %d:\n",i);
        scanf("%u",&alumnos.nota2);
        fflush(stdin);
    }
    FILE *pf;
    pf=fopen("alumnos.dat","wb");
    if(pf==NULL)
    {
        printf("Error al abrir el archivo");
        exit(1);
    }
    fwrite(alumnos,sizeof(struct datos),n,pf);
    if(fclose(pf)!=0)
    {
        printf("Error al cerrar el archivo");
        exit(1);
    }
    pf=fopen("alumnos.dat","rb");
    if(pf==NULL)
    {
        printf("Error al abrir el archivo para lectura");
        exit(1);
    }
    fseek(pf,0l,SEEK_SET);
    struct copia{
        char nombre[30];
        unsigned int nota1;
        unsigned int nota2;
    };
    struct copia lectura[50];
    int cant_alumnos=0;
    i=0;
    while(!feof(pf))
    {
        fread(&lectura,sizeof(struct copia),1,pf);
        printf("\n\nNombre del alumno:%s\nnota1:%u\nnota2:%u",lectura.nombre,lectura.nota1,lectura.nota2);
        cant_alumnos++;
        i++;
    }
    float promedio;
    float promedio_max=0;
    char nombre_max[30];
    int j;
    for(i=0;i<cant_alumnos;i++)
    {
        promedio=((lectura.nota1)+(lectura.nota2))/2;
        if(promedio>promedio_max)
        {
            for(j=0;j<30;j++)
            {
                nombre_max[j]='\0';
            }
            promedio_max=promedio;
            strcpy(nombre_max,lectura.nombre);
        }
    }
    if(fclose(pf)!=0)
    {
        printf("Error al cerrar el archivo para lectura");
        exit(1);
    }


    printf("\n\nEl alumno del mejor promedio es %s y el promedio es %.2f",nombre_max,promedio_max);
    return 0;
}

Mi problema es que cuando entra en el bucle del while(!feof(pf)) hace una pasada de mas y lee un dato que no tendria que hacerlo. Porfavor, espero una pronta solucion. saludos.




En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con bucle y funcion feof
« Respuesta #1 en: 24 Julio 2012, 14:56 pm »

El problema con la lectura incorrecta de los registros se debe a dos errores:

* El primero sucede al tratar de leer un registro ya que siempre lo almacenas en "lectura", esa es la primera posición del array. Debes indicar la posición del elemento con "&lectura[ i ]" o "lectura + i"

* El segundo es lógico ya que el correcto funcionamiento de "feof" es devolver verdadero (diferente de cero) solo después que una función de lectura como "fread" falle.

Ese fragmento (y solo ese) corregido:
Código
  1. for (i = 0; fread(lectura, sizeof *lectura, 1, pf) == 1; i++)
  2.   printf(
  3.      "Nombre:%s\nnota1:%u\nnota2:%u",
  4.      lectura.nombre,
  5.      lectura.nota1,
  6.      lectura.nota2
  7.   );
  8. cant_alumnos = i;

Debo aclarar que no verifique a fondo el programa, tal vez (eso parece) tenga mas errores.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Franquieli

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema con bucle y funcion feof
« Respuesta #2 en: 30 Julio 2012, 21:21 pm »

Muchas gracias rir3760 me solucionaste un problema que me venia rompiendo bastante las bolas. jaja saludos  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con bucle y VBscript
Programación Visual Basic
Webagent007 3 1,713 Último mensaje 10 Febrero 2006, 06:14 am
por Webagent007
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,628 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
Problema lógico con bucle
Java
Debci 3 3,202 Último mensaje 1 Diciembre 2009, 22:52 pm
por Caballero Maldito
Ayuda bucle con funcion connect()
Programación C/C++
luzzzifer 2 2,447 Último mensaje 9 Agosto 2010, 05:26 am
por luzzzifer
Problema Bucle C
Programación C/C++
P.AGCD 4 3,954 Último mensaje 12 Julio 2011, 02:33 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines