Si vas a desarrollar un programa en C debes ajustarte a las facilidades que provee ese lenguaje olvidándote por el momento de las características de ADA y centrándote en el algoritmo, en tu caso este es:
mientras se pueda leer una linea de texto
procesarla
Eso en C lo puedes implementar utilizando las funciones fopen/fclose para abrir/cerrar el archivo y fgets para leer la linea de texto. Un programa de ejemplo donde el proceso de la linea es simplemente imprimirla en la salida estándar es:
#include <stdio.h>
#include <stdlib.h>
#define LONG_MAX_LINEA 256
#define NOM_ARCHIVO "Entrada.txt"
int main(void)
{
FILE *entrada;
char linea[LONG_MAX_LINEA];
if ((entrada
= fopen(NOM_ARCHIVO
, "r")) == NULL
){ return EXIT_FAILURE;
}
while (fgets(linea
, LONG_MAX_LINEA
, entrada
) != NULL
)
return EXIT_SUCCESS;
}
En tu caso este es mas complicado, hay que conocer si el nombre de cada equipo es una sola palabra (por ejemplo "Barcelona") o bien pueden existir nombres con mas de una palabra (por ejemplo "La Coruña").
Formas de separar la linea hay muchas ya que puede basarse en diferentes funciones como strchr, strpbrk, strtok, etc.
Si la estructura del archivo de datos esta garantizada una forma separando las partes en base a una funcion propia es:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LONG_MAX_LINEA 256
#define NOM_ARCHIVO "Entrada.txt"
struct partido {
char local[LONG_MAX_LINEA];
char visitante[LONG_MAX_LINEA];
int goles_loc;
int goles_vis;
};
struct partido extraer(char const linea[]);
int main(void)
{
FILE *entrada;
char linea[LONG_MAX_LINEA];
struct partido p;
if ((entrada
= fopen(NOM_ARCHIVO
, "r")) == NULL
){ return EXIT_FAILURE;
}
while (fgets(linea
, LONG_MAX_LINEA
, entrada
) != NULL
){ p = extraer(linea);
printf("Local: %s\n", p.
local); printf("Visitante: %s\n", p.
visitante); printf("Resultado: %d - %d\n", p.
goles_loc, p.
goles_vis); }
return EXIT_SUCCESS;
}
struct partido extraer(char const linea[])
{
struct partido p;
char *a;
char *b;
/* Obtenemos la posicion de " - " */
sprintf(p.
local, "%.*s", a
- linea
, linea
);
/* Obtenemos la posicion de " : " */
a += 3;
sprintf(p.
visitante, "%.*s", b
- a
, a
);
/* Los goles los extraemos con sscanf */
sscanf(b
+ 3, "%d %d", &p.
goles_loc, &p.
goles_vis);
return p;
}
Pero si hay mas espacio blanco en las lineas se debe modificar la aproximacion para buscar solo los caracteres separadores ('-' y ':' en tu caso).
Un saludo