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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Fallo al insertar estructura a vector de estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Fallo al insertar estructura a vector de estructuras  (Leído 1,683 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Fallo al insertar estructura a vector de estructuras
« en: 7 Julio 2015, 14:47 pm »

Hola tengo una función que añade a un vector de estructuras, una estructura con una ip y una mac asociada, siempre y cuando no esté añadida ya en el vector, pero al ejecutarlo me aparecen repetidas las ips con sus correspondientes macs, es frustrante. ¿donde puede estar el error?

Código
  1. void lista_usuarios::insertar_host(u_char* ip, u_char* mac)
  2. {
  3. int salida;
  4. printf("CONTENIDO LISTA************\n");
  5. for (int i = 0; i < usuarios.size(); i++)
  6. {
  7. for (int j = 0; j < 4; j++)
  8. {
  9. printf("%x", usuarios[i].ip[j]);
  10. }
  11. printf("     ");
  12. for (int j = 0; j < 6; j++)
  13. {
  14. printf("%x", usuarios[i].mac[j]);
  15. }
  16. printf("\n");
  17. }
  18. printf("CONTENIDO IPS Y MAC***********\n");
  19. for (int j = 0; j < 4; j++)
  20. {
  21. printf("%x", ip[j]);
  22. }
  23. printf("     ");
  24. for (int j = 0; j < 6; j++)
  25. {
  26. printf("%x", mac[j]);
  27. }
  28. printf("\n");
  29. for (int i = 0; i < usuarios.size(); i++)
  30. {
  31. salida = 0;
  32. for (int j = 0; j < 4; j++)
  33. {
  34. if (ip[j] != usuarios[i].ip[j])
  35. {
  36. salida++;
  37. break;
  38. }
  39. }
  40.  
  41. for (int j = 0; j < 6; j++)
  42. {
  43. if (mac[j] != usuarios[i].mac[j])
  44. {
  45. salida++;
  46. break;
  47. }
  48. }
  49. printf("salida %d\n", salida);
  50.  
  51. if (salida == 2)
  52. {
  53. printf(" ENTRA \n");
  54. host usuario;
  55. for (int j = 0; j < 4; j++)
  56. {
  57. usuario.ip[j] = ip[j];
  58. }
  59. for (int j = 0; j < 6; j++)
  60. {
  61. usuario.mac[j] = mac[j];
  62. }
  63. usuarios.push_back(usuario);
  64. break;
  65. }
  66. }
  67.  
  68. if (usuarios.size() == 0)
  69. {
  70. host usuario;
  71. for (int j = 0; j < 4; j++)
  72. {
  73. usuario.ip[j] = ip[j];
  74. }
  75. for (int j = 0; j < 6; j++)
  76. {
  77. usuario.mac[j] = mac[j];
  78. }
  79. usuarios.push_back(usuario);
  80. }


« Última modificación: 7 Julio 2015, 15:25 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Fallo al insertar estructura a vector de estructuras
« Respuesta #1 en: 7 Julio 2015, 15:38 pm »

Código
  1. for (int i = 0; i < usuarios.size(); i++)
  2. {
  3. salida = 0;
  4. for (int j = 0; j < 4; j++)
  5. {
  6. if (ip[j] != usuarios[i].ip[j])
  7. {
  8. salida++;
  9. break;
  10. }
  11. }
  12.  
  13. for (int j = 0; j < 6; j++)
  14. {
  15. if (mac[j] != usuarios[i].mac[j])
  16. {
  17. salida++;
  18. break;
  19. }
  20. }
  21. printf("salida %d\n", salida);
  22.  
  23. if (salida == 2)
  24. {
  25. printf(" ENTRA \n");
  26. host usuario;
  27. for (int j = 0; j < 4; j++)
  28. {
  29. usuario.ip[j] = ip[j];
  30. }
  31. for (int j = 0; j < 6; j++)
  32. {
  33. usuario.mac[j] = mac[j];
  34. }
  35. usuarios.push_back(usuario);
  36. break;
  37. }
  38. }

El if del final se ejecuta 1 vez por cada usuario. Lo que debes hacer es sacarlo del bucle, y en el bucle poner un return (o lo que quieras) si alguno se repite.

Tal como lo tienes, en cuanto encuentra 1 que es diferente, va a añadir el nuevo, y hacer break;


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Fallo al insertar estructura a vector de estructuras
« Respuesta #2 en: 7 Julio 2015, 16:13 pm »

En construccion.

Solucionado.

Código
  1. void lista_usuarios::insertar_host(u_char* ip, u_char* mac)
  2. {
  3. int cont = 0, cant = 0;
  4.  
  5. for (int i = 0; i < usuarios.size(); i++)
  6. {
  7. cont = 0;
  8. for (int j = 0; j < 4; j++)
  9. {
  10. if (ip[j] != usuarios[i].ip[j])
  11. {
  12. cont++;
  13. break;
  14. }
  15. }
  16.  
  17. for (int j = 0; j < 6; j++)
  18. {
  19. if (mac[j] != usuarios[i].mac[j])
  20. {
  21. cont++;
  22. break;
  23. }
  24. }
  25. if (cont == 2)
  26. cant++;
  27. }
  28.  
  29. if (cant == usuarios.size())
  30. {
  31. printf(" ENTRA \n");
  32. host usuario;
  33. for (int j = 0; j < 4; j++)
  34. {
  35. usuario.ip[j] = ip[j];
  36. }
  37. for (int j = 0; j < 6; j++)
  38. {
  39. usuario.mac[j] = mac[j];
  40. }
  41. usuarios.push_back(usuario);
  42. }}

Como siempre gracias ivancea XDD, no sé si tendrá algun bug ahora, parece que no.

Gracias y un saludo.
« Última modificación: 7 Julio 2015, 16:21 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fallo al insertar subtitulos
Multimedia
Lemmy 3 1,715 Último mensaje 5 Mayo 2005, 08:57 am
por arda-lothi
Vector(STL) con estructuras
Programación C/C++
Ja_90 3 1,869 Último mensaje 8 Diciembre 2014, 08:59 am
por Orubatosu
[Ayuda] Fallo de estructura
Programación C/C++
jospar 3 2,525 Último mensaje 18 Enero 2015, 22:18 pm
por avesudra
Estructuras: inicializar en ceros un array que es miembro de una estructura.
Programación C/C++
quantumax9 2 1,776 Último mensaje 12 Febrero 2019, 19:53 pm
por ThunderCls
Ayuda para insertar de forma ordenada en un vector
Programación C/C++
elcentral_ 6 3,192 Último mensaje 7 Diciembre 2020, 02:28 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines