[C] Problema con cadenas

Iniciado por alvr, 9 Enero 2013, 19:38 PM

0 Miembros y 1 Visitante están viendo este tema.

alvr

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) {



}

durasno

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
Ahorrate una pregunta, lee el man