Buenas, tengo un problema con una práctica que he de hacer, y no me sale por más que lo intento.
La idea sería esta:
CitarPlanteamiento general:
Leer el fichero, creando los subvectores nombres y goles, además de obtener el número de jugadores que han marcado. Para ello:
Iniciar variables
Leer numero de goles (fin = fscanf...)
Mientras no sea fin de fichero (fin!=EOF)
Leer tantos nombres como numero de goles (for)
fscanf (Fich, "%s", jugador);/*dependerá de los identificadores declarados*/
y para cada nombre leído:
Buscarlo en el vector de nombres
Si ya existe ese nombre incrementar el numero de goles marcados por ese jugador en 1
Si no existe ese nombre, insertarlo al final del vector nombres y anotarle en el vector de goles el gol marcado (no olvidar incrementar numElem en 1)
Leer numero de goles de la siguiente jornada
Escribir resultados:
Recorrer subvectores (for desde 0 hasta numElem-1)
Escribir nombres y goles
Y hay que utilizar al menos las siguientes funciones:
Citarint iguales (char c1[M], char c2[M]);
/*retorna 1 si las cadenas c1 y c2 son iguales y 0 en otro caso*/
int buscar (char jugador[M], char nombres [N][M], int numElem);
/*busca el nombre jugador en el subarray de nombres, retornando la posición en la que lo encuentra, en caso de no encontrarlo retorna el valor numElem*/
En resumidas cuentas, se abre un fichero, en una cadena se guardan los goles y en otra los goleadores. Si un jugador ya había marcado un gol, sumarle otro.
De momento este es el código que tengo:
#include <stdio.h>
#define N 30
#define M 25
#define JORNADAS 38
int iguales(char c1[M], char c2[M]);
int buscar(char jugador[M], char nombres[N][M], int numElem);
void main() {
char nombres[N][M];
int goles[JORNADAS];
char letra;
int fin;
int i=1, j, k; //variables para ciclos
FILE *archivo;
archivo = fopen("goles.txt", "r");
fin = fscanf(archivo, "%d", &goles[i]);
while(fin != EOF) {
for(j=0;j<goles[i];j++) {
fscanf(archivo, "%s", nombres);
}
fin = fscanf(archivo, "%d", &goles[i+1]);
i++;
}
}
int iguales(char c1[M], char c2[M]) {
int iguales, i = 0;
while (c1[i] != '\0' && c2[i] != '0' && c1[i] == c2[i]) i++;
iguales = (c1[i] == c2[i]);
return iguales;
}
int buscar(char jugador[M], char nombres[N][M], int numElem) {
}
Hola! te marco los errores que veo:
- Para guardar nombres del archivo en una matriz de caracteres tenes que hacer:
fscanf(archivo, "%s", nombres[j]);/* te falto el subindice */
- Los arreglos empiezan en la posicion cero, si vos inicializas i en 1 estas perdiendo una posicion
- Si vas a hacer goles[i+1], no es mejor tener i++ antes del fscanf?? asi no haces i+1
- en la funcion iguales pusiste '0' te olvidaste la barra '\'
Finalmente en la funcion buscar() tenes que usar la funcion iguales(suponiendo que esta bien), mas o menos seria:
bucle que recorra todos los nombres
llamar a la funcion iguales, pasarle jugador y nombres[ i ]
si iguales retorna 1 entonces buscar debe retornar i de lo contrario numElem
Apesar de que de decis que no te sale, no hiciste mucho. Trata de seguir haciendo con las modificaciones q te marque