elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Problema con cadenas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Problema con cadenas  (Leído 1,661 veces)
alvr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
[C] Problema con cadenas
« en: 9 Enero 2013, 19:38 pm »

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:
Citar
Planteamiento 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:
Citar
int 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:

Código
  1. #include <stdio.h>
  2. #define N 30
  3. #define M 25
  4. #define JORNADAS 38
  5.  
  6. int iguales(char c1[M], char c2[M]);
  7. int buscar(char jugador[M], char nombres[N][M], int numElem);
  8.  
  9. void main() {
  10.  
  11. char nombres[N][M];
  12. int goles[JORNADAS];
  13. char letra;
  14.  
  15. int fin;
  16. int i=1, j, k; //variables para ciclos
  17.  
  18. FILE *archivo;
  19. archivo = fopen("goles.txt", "r");
  20.  
  21.    fin = fscanf(archivo, "%d", &goles[i]);
  22.  
  23. while(fin != EOF) {
  24.  
  25.  
  26.        for(j=0;j<goles[i];j++) {
  27.  
  28.            fscanf(archivo, "%s", nombres);
  29.  
  30.        }
  31.  
  32.        fin = fscanf(archivo, "%d", &goles[i+1]);
  33.  
  34.        i++;
  35.  
  36. }
  37.  
  38. }
  39.  
  40. int iguales(char c1[M], char c2[M]) {
  41.  
  42. int iguales, i = 0;
  43.  
  44. while (c1[i] != '\0' && c2[i] != '0' && c1[i] == c2[i]) i++;
  45.  
  46. iguales = (c1[i] == c2[i]);
  47.  
  48. return iguales;
  49.  
  50. }
  51.  
  52. int buscar(char jugador[M], char nombres[N][M], int numElem) {
  53.  
  54.  
  55.  
  56. }


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: [C] Problema con cadenas
« Respuesta #1 en: 9 Enero 2013, 21:41 pm »

Hola! te marco los errores que veo:

- Para guardar nombres del archivo en una matriz de caracteres tenes que hacer:
Código
  1. 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


En línea

Ahorrate una pregunta, lee el man
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Winsock y cadenas Hexadecimales (guíenme)
Programación Visual Basic
cero_kill_byte 5 7,565 Último mensaje 15 Mayo 2005, 07:49 am
por cero_kill_byte
Problema al concatenar cadenas
PHP
Feedeex 4 4,801 Último mensaje 13 Mayo 2011, 12:49 pm
por Feedeex
Problema al leer cadenas con espacios [C++]
Programación C/C++
Don Pollo 3 21,719 Último mensaje 20 Mayo 2011, 03:49 am
por Lx
Problema con cadenas
Programación C/C++
Uknow 2 2,271 Último mensaje 11 Diciembre 2011, 23:37 pm
por Uknow
Problema cadenas
Programación C/C++
muymuyperdido 6 2,785 Último mensaje 8 Enero 2013, 15:48 pm
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines