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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / 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.


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines