Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/11/2009, 11:14
KKarloss
 
Fecha de Ingreso: junio-2007
Mensajes: 53
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Cómo acceder a estruturas de datos

Gracias por su rápida respuesta. No, como precondición no puede haber dos participantes del mismo pais. Lo que necesito saber es si el acceso asi es correcto, es decir, es esto correcto como lo hago "misFestivales.historia[i].concursante[j].pais"
Cita:
Iniciado por Annoying Ver Mensaje
Creo que el contador te da un valor elevado no? si es asi, es porque estas contando todos los participantes de un mismo pais, me explico:


Son 5 festivales en total, y tienes 2 participantes en cada festival (y quieres comprobar "españa"):

festival 1
españa
francia

festival 2
españa
alemania

festival 3
españa
españa

festival 4
francia
españa

festival 5
españa
holanda

Lo que estás haciendo en esos bucles, es comparar el pais de todos los participantes de un festival, y si el país coincide es que el país estuvo en el festival, el problema es que no controlas que pueden haber varios participantes del mismo pais en el mismo festival.. el conteo en éste caso te daría 6, y realmente debería ser 5 por el número de festivales.

Solución que te propongo, es el uso de un switch, en el momento que el país de un concursante coincida con el país que quieres comprobar que estuvo en el festival, pues que cambie al siguiente festival, por ejemplo:

Código:
for(i=1;i<=60;i++){
     j=1;
     for(j=1;j<=50;j++){
         if((misFestivales.historia[i].concursante[j].pais) == pais ){
             contador=contador+1;
             j=51; //obligas a cambiar al siguiente festival
         }
     }
     i=i+1;
}
Otra cosa si mal no recuerdo y porsia no lo conoces aun, para que un char sea una cadena de caracteres tendría que ser un array:

char pais[10] = "españa";

y para comparar cadenas (#include <string.h>):

int x = strcmpi(cadena1,cadena2);
//devuelve un entero, si devuelve '0' es que son iguales
if(x==0) printf("Son iguales");

En tu caso seria:

x = strcmpi(misFestivales.historia[i].concursante[j].pais,pais);
if(x==0){
contador=contador+1;
j=51;
}

Y... si esta algo mal pues lo siento, tendría que revisar una que otra cosa en C, ya que he cambiado chip a java y .net xD.. Suerte.