Saludos,
- Me ha ayudado enormemente este e-book gratuito en español:
https://openlibra.com/es/book/introduccion-a-la-programacion-con-c-3- En mi caso lo he hecho con puro Array (muestro extracto):
#define MAX_FILAS 50
#define TAM_FECHA 11
#define TAM_NOMBRE 50
int main() {
char fechas[MAX_FILAS][TAM_FECHA];
int puntajes[MAX_FILAS];
char nombres[MAX_FILAS][TAM_NOMBRE];
- Para leer los datos del fichero, me pareció más cómodo hacerlo con fscanf (muestro estracto):
/* Lee el fichero y guarda los registros */
while ( feof(file
) == 0 ) { fscanf(file
, "%s%d%s", fechas
[cont
], &puntajes
[cont
], nombres
[cont
]); printf("%s | %d | %s\n", fechas
[cont
], puntajes
[cont
], nombres
[cont
]); cont++;
}
- Una vez se tenga todo guardado el los Array (un lío que C no tenga un tipo string

) se procede a ordenarlo, en el e-book está el método de ordenamiento Burbuja ejemplificado, se tiene que hacer uso de Arrays auxiliares y eso. Pero no se pueden copiar Array a otro Array directamente, se tiene que usar strncpy(array_destino, array_origen, cantidad_de_elementos), esto también está teorizado y ejemplificado en el e-book, muestro extracto que solo ordena el puntaje y la fecha, también debes ordenar el nombre:
/* Ordenacion mediante metodo Burbuja*/
for ( int i = 0; i < cont - 1; i++ ) {
for ( int j = 0; j < cont - 1; j++ ) {
if ( puntajes[j] < puntajes[j + 1] ) {
strncpy(aux_fechas
, fechas
[j
], TAM_FECHA
); aux_puntajes = puntajes[j];
strncpy(fechas
[j
], fechas
[j
+ 1], TAM_FECHA
); puntajes[j] = puntajes[j + 1];
strncpy(fechas
[j
+ 1], aux_fechas
, TAM_FECHA
); puntajes[j + 1] = aux_puntajes;
}
}
}
- Al final solo queda mostrar los resultados que piden, cantidad de líneas leídas (cant), puntaje más alto (puntajes[0]) y usar un FOR para mostrar todos los registros ordenados, muestro salida del programa ordenado:
C:\Users\EdSon\Desktop>type read_file.txt
3-2-2019 21000 NOMBRE
3-2-2019 39000 NOMBRE
3-2-2019 18000 NOMBRE
C:\Users\EdSon\Desktop>gcc read_file.c -o read_file.exe && read_file.exe
Fichero leido:
3-2-2019 | 21000 | NOMBRE
3-2-2019 | 39000 | NOMBRE
3-2-2019 | 18000 | NOMBRE
Total lineas leidas: 3
Puntaje mas alto: 39000
Fichero ordenado:
3-2-2019 | 39000 | NOMBRE
3-2-2019 | 21000 | NOMBRE
3-2-2019 | 18000 | NOMBRE
C:\Users\EdSon\Desktop>
- Ahora solo te toca encajar todo el código y listo (buen ejercicio)
