Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - miguel95

#1
Programación C/C++ / Duda ejercicio en C
28 Junio 2017, 23:57 PM
Buenas a todos, estoy realizando un ejercicio de clase y me he encontrado con un problema. Estoy aquí para ver si me podeis echar un cable.
El ejercicio trata de crear una tabla hash con poblaciones y su número de habitantes. La dificultad reside en que para introducir los nombre y los habitantes tengo que hacerlo todo de seguido y parar al escribir FIN. Por ejempo: Madrid 400 Barcelona 700 FIN

Uso contadores para detectar si hay un espacio y saber a que columna asignarlo, pero algo falla y salen simbolos raros y no coge bien los nombres. Ahí va la parte del código en la que aparece: case 2: printf("Introduzca poblaciones: ");
        fflush(stdin);
gets(linea);
         cont=0;
         c=0;
         
         for(i=0;i<strlen(linea);i++)
{
         
          if (linea[i]!=' ')
{
          cadena[c]=linea[i];
          c++;
}
else
{
if (cont==0){
//es la ciudad
  strcpy(pob,cadena);
cont++;
}
else{
//es el nº de habitantes
   habitantes=atoi(cadena);//convertir el string a int
   insertar(t,pob,habitantes);
   cont=0;
}

if (strcmp(cadena,"FIN")==0)
{
      break;
      }
     
      strcpy(cadena," ");//inicializar la cadena a la caderna vacia, para obtener la siguiente palabra
     
  c=0;
}

break;

}


La función insertar es esta:
int insertar(tablahash t, char poblacion[30], int habitantes){
int i=hash(poblacion) % TABLA;

while(i<=TABLA){
if(strcmp(t[i].poblacion,"")==0){//si la posicion esta vacia
strcpy(t[i].poblacion, poblacion);
t[i].habitantes=habitantes;
break;
}
else if(strcmp(t[i].poblacion,poblacion)==0){//si ya existe
printf("YA INSERTADO\n");
break;
}
if(strcmp(t[i].poblacion,"")!=0){//si la clave esta ya usada
i=i*i;
}
}
}



¿Alguien podría orientarme o decirme donde esta el fallo?
Gracias de antemano.