liado con ficheros en C

sh31k

Hace pocas días que hemos empezado con ficheros y nos han mandado una practica hoy que se lo que tengo que poner pero ni idea de como empezar, a ver si me podeis echar una mano, ahi vá:

Escribir un programa en C que presente un menú en pantalla con las siguientes opciones:
         1. Cargar en un vector los datos (tipo entero) que aparecen en un fichero de texto
         (cada dato en una linea). Se sabe que no habrá mas de 1000 elementos. Se solicitará 
         desde el teclado el nombre del fichero.
         2. Visualizar los datos del vector, siguiendo la misma ordenación que aparece 
         en el fichero. Obviamente, la presentación puede ocupar varias pantallas. Esta 
         opción no podrá realizarme si no se han cargado previamente los datos en el vector.
         3. Presentar en pantalla los siguientes datos estadísticos. Al igual que la opción
         anterior, no podrá eralizarse si no hay datos cargados en el vector.
         
                      a. Número de elementos.
                      b. Suma de todos los elementos.
                      c. Número Mayor.
                      d. Número Menor.
                      e. Media Aritmética.
                      f. Mediana.
                      g. Moda(puede haber más de una).

         4. Abandonar el programa.

notas:

  • Los elementos del fichero están en forma de cadena y no ocuparán mas de 25 caracteres.
  • La mediana es el valor intermedio de una lista de valores ordenados. Si el número de elementos es par, la mediana es la media de los dos valores centrales.
  • La moda es el valor que más se repite, por lo que puede haber mas de uno.

En principio es 1 menu con un submenu en 3, para la lectura se que tengo que usar algo asi:
num=atoi(cad);
char cad[25];
int vector[TAM]


                  fgets(cad,25,fich);
                  while(!frof(fich))
                  {
                         num[i]=atoi(cad);
                         i+1;
                         fgets(cad,25,fich);
                  }

alguien me puede guiar un poco? ando bastante perdido con los ficheros.
Un saludo :)

HoTiTo

En el tema de ficheros, casi siempre para lo más usual se suele usar un patrón predefinido en cuanto a lo que hacer.

Se crea un puntero FILE, se abre el fichero con él, se comprueba que esta abierto, se lee con un while hasta el fin de fichero (EOF), se cierra, se comprueba que se ha cerrado, etc.

No tiene más ciencia. Tienes que controlar los modos del fopen, que dependen de lo que quieras hacer. Leer, escribir, abrir en modo binario, etc.

Con cada iteración del while obtienes una linea en una variable. Esa variable la asignas a la posición i del vector que hayas creado (i tiene que ir aumentando conforme avanza el while) y poco más...

JuAn4k4

Del fichero no tienes porque leer una cadena y hacer atoi, si te dicen que en el fichero hay enteros, lee enteros:

FILE* fichero;
int vector[1000];

... // Abrir Fichero ( Busca en Google "fopen C" )

while (! feof(fichero ) )
fscanf(fichero, "%d", &(vector));

mohon_drive

El manejo de ficheros es muy sencillo, las soluciones anteriores van bien encaminadas, además el propio lenguaje proporciona funciones ya implementadas que resultan de utilidad.

spoiler

Usuarios habituales

  • mohon_drive
  • JuAn4k4
  • HoTiTo
  • sh31k