Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lagged Player en 25 Agosto 2017, 00:44 am



Título: Duda con respecto al uso de bucles para extraer datos de un fichero.
Publicado por: Lagged Player en 25 Agosto 2017, 00:44 am
Buenas, estoy aprendiendo lenguaje C y encontre este ejercicio:

"Crear un programa relativo a un fichero con notas de 35 alumnos del que se quieren extraer datos estadísticos (% de aprobados, % de suspensos, número de alumnos con puntuación 10 y número de alumnos con puntuación 0). Considerar que los datos se encuentran en un fichero cuyo nombre es notas.dat"

El codigo que escribi es el siguiente:

Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int notas[35];
    int i=0;
    float aprobados=0;
    float reprobados=0;
    int dieces=0;
    int ceros=0.;

    puts("Programa de notas de clase.");

    FILE* fichero;
    fichero=fopen("c:\\notas.dat","rt");

    for(i=0;i<35;i++)
    {
        fscanf(fichero,"%d",&notas[i]);
    }
    fclose(fichero);//cerramos el fichero con los datos extraidos

    for(i=0;i<35;i++);
    {
    printf("%d\n",notas[i]);
        if(notas[i] >= 5)
        {
            aprobados=aprobados+1;
        }
        else
        {
            reprobados=reprobados+1;
        }
        if(notas[i]==10)
        {
            dieces=dieces+1;
        }
        if(notas[i]==0)
        {
            ceros=ceros+1;
        }
    } //cerramos el for

    printf("Hay un total de %f alumnos aprobados\n",aprobados);
    printf("Hay un total de %f alumnos reprobados\n",reprobados);

    aprobados=(aprobados/35)*100;
    reprobados=(reprobados/35)*100;

    printf("Hay un total de %d alumnos con diez\n",dieces);
    printf("Hay un total de %d alumnos con cero\n",ceros);
    printf("El porcentaje de alumnos aprobados es de %f \n",aprobados);
    printf("El porcentaje de alumnos reprobados es de %f \n",reprobados);

    return 0;
}


El problema es que cuando pido imprimir por pantalla el valor de notas[ i ] el programa me muestra el numero 2009261424 :huh: en vez de los diferentes valores del array. Pero si reescribo el codigo de la siguiente forma el programa funciona, ¿por que?

Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int notas[35];
    int i=0;
    float aprobados=0;
    float reprobados=0;
    int dieces=0;
    int ceros=0.;

    puts("Programa de notas de clase.");

    FILE* fichero;
    fichero=fopen("c:\\notas.dat","rt");
    for(i=0; i<35; i++)
    {
        fscanf(fichero,"%d",&notas[i]);

        if(notas[i] >= 5)
        {
            aprobados=aprobados+1;
        }
        else
        {
            reprobados=reprobados+1;
        }
        if(notas[i]==10)
        {
            dieces=dieces+1;
        }
        if(notas[i]==0)
        {
            ceros=ceros+1;
        }
    }
    fclose(fichero);//cerramos el fichero con los datos extraidos

    printf("Hay un total de %f alumnos aprobados\n",aprobados);
    printf("Hay un total de %f alumnos reprobados\n",reprobados);

    aprobados=(aprobados/35)*100;
    reprobados=(reprobados/35)*100;

    printf("Hay un total de %d alumnos con diez\n",dieces);
    printf("Hay un total de %d alumnos con cero\n",ceros);
    printf("El porcentaje de alumnos aprobados es de %f \n",aprobados);
    printf("El porcentaje de alumnos reprobados es de %f \n",reprobados);

    return 0;
}