Autor Tema: LenguajeC ejercicio p173e2 abrir y leer ficheros fopen rt fgets con arrays  (Leído 2192 veces)

aritter001

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int p173e1(){
int i=0; int alum0=0; int alum10=0; int alumapr=0; int alumsusp=0;
int alumnos[36];
char digito[2];
float alumnosuspe=0.0;
float alumnoapro=0.0;

FILE* fichero;
fichero=fopen("datosalumnos.txt","rt");
for (i=0;i<35;i++){
    fgets(digito,50,fichero);
    alumnos[i]=atoi(digito);
    printf("%d\n",alumnos[i]);
}
fclose(fichero);

//CÁLCULOS

for (i=0;i<35;i++){

    if (alumnos[i]>=5){
        alumapr=alumapr+1;
        printf(" %d",alumnos[i]);
        printf("Alumno aprobado\n");
        }
        else{alumsusp=alumsusp+1;
        printf(" %d",alumnos[i]);
        printf("Alumno suspendido\n");
        }



    if (alumnos[i]==10)
        {alum10=alum10+1;


    }
    if (alumnos[i]==0){
            alum0=alum0+1;

    }


}
alumnoapro=(float)(alumapr);
alumnosuspe=(float)(alumsusp);
printf("Alumnos aprobados: %lf\n",(alumnoapro/35)*100);
printf("Alumnos suspendidos: %lf\n",(alumnosuspe/35.0)*100);
printf("Alumnos de 10: %d\n",alum10);
printf("Alumnos de 0: %d", alum0);




return 0;


}

Visualizo lo que tengo en alumnos [ i ] y me salen bien los valores, pero una vez cerrado el fichero y calculados los valores que piden, el primer valor del array me sale 0 y en realidad es 6. Como solución he aumentado el tamaño del array a 36 y empezar el contador desde 1. Funcionaba, ni idea por qué, pero estoy seguro que en lo que he escrito he hecho alguna tontería y no se qué puede ser :/

AYUDEN PLZZZZZ
« Última modificación: 09 de Mayo 2017, 17:56 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:C-Duda ejercicio de alumnos (p173e2)
« Respuesta #1 en: 17 de Febrero 2017, 13:10 »
Hola aritter001.

Estuve mirando un poco tu código, y no sabría darte una explicación, pero si aumentas el tamaño de la variable "digito" o lo igualas al límite de caracteres que que recoges con fgets, funciona correctamente, me refiero a estas dos líneas.

Código: [Seleccionar]
char digito[50];
fgets(digito,50,fichero);

Espero que alguien con más conocimiento en Lenguaje C lo pueda aclarar.

Saludos. ;D

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".