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

 

 


Tema destacado: Top 20 herramientas Hacking más populares de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO] Consulta - Introducir varios datos en Struct [C++]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Consulta - Introducir varios datos en Struct [C++]  (Leído 4,610 veces)
YuseTist


Desconectado Desconectado

Mensajes: 396


$~*|_


Ver Perfil
[SOLUCIONADO] Consulta - Introducir varios datos en Struct [C++]
« en: 9 Marzo 2015, 16:25 pm »

Buenas,

Estos practicando las estructuras en c++ y bien hasta el momento más o menos voy bien y ahora tengo una consulta, he ingresado datos y luego los he mostrado, hasta hay bien, pero la cosa es si puedo introducir más de 1 dato, osea repetir progresivamente hasta que yo quieras.

Aquí mi código:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(){
  6.  
  7. int ver;
  8.  
  9. struct Personaje{
  10. char nombre[30];
  11. int edad;
  12. char empresa[30];
  13. }Trabajador;
  14.  
  15. cout << "Nombre: ";
  16. cin >> Trabajador.nombre;
  17.  
  18. cout << "Edad: ";
  19. cin >> Trabajador.edad;
  20.  
  21. cout << "Empresa: ";
  22. cin >> Trabajador.empresa;
  23.  
  24. cout << "Pulsa '1' si quieres ver los datos: ";
  25. cin >> ver;
  26.  
  27. if(ver == 1){
  28. cout << "Nombre: " << Trabajador.nombre << endl;
  29. cout << "Edad: " << Trabajador.edad << endl;
  30. cout << "Empresa: " << Trabajador.empresa << endl;
  31. }else;
  32.  
  33. cin.get();
  34. return 0;
  35. }

Eso hace que tu metas 3 datos y luego los muestre, pero me gustaría saber si pudiera meter varios datos más y luego buscar 1 en especial y me lo diga.

He encontrado referencias acá:

http://www.aprendeaprogramar.com/mod/resource/view.php?id=495

Pero para lo que busco hacer está usando punteros y me gustaría saber si hay alguna manera de hacerlo sin usar punteros ya que hasta hay no llego aún.

Gracias, saludos.


« Última modificación: 9 Marzo 2015, 22:03 pm por YuseTist » En línea

Esta página web no está disponible - Google Chrome
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Consulta - Introducir varios datos en Struct [C++]
« Respuesta #1 en: 9 Marzo 2015, 16:35 pm »

Lo normal es que la declaración del struct se haga fuera de la función:

Código
  1. struct Personaje{
  2.  char nombre[30];
  3.  int edad;
  4.  char empresa[30];
  5. };
  6.  
  7. int main( )
  8. {
  9.  struct Personaje Trabajador;
  10. }

Partiendo de esta base, para no guarrear mucho el código, siempre puedes crear un array fijo de elementos:

Código
  1. int main( )
  2. {
  3.  int i;
  4.  struct Personaje Trabajadores[20];
  5.  for( i=0; i < 20; ++i )
  6.    Trabajadores[ i ].edad = 20 + i;
  7. }

El ejemplo anterior crea un array de 20 elementos de tipo "Personaje". El bucle, para mostrarte un ejemplo sobre cómo se puede acceder a los elementos de ese array, asigna una edad a cada uno de ellos: 20 al primero, 21 al segundo, 22 al siguiente y así.

Esto es con arrays de tamaño fijo. También puedes crearlos del tamaño que tu quieras haciendo uso de la memoria dinámica:

Código
  1. int main( )
  2. {
  3.  int i;
  4.  struct Personaje *Trabajadores = (struct Personaje*)malloc( 20 * sizeof( struct Personaje ) );
  5.  for( i=0; i < 20; ++i )
  6.    Trabajadores[ i ].edad = 20 + i;
  7.  
  8.  free( Trabajadores );
  9. }

En el caso de la memoria dinámica, hay que acordarse de liberar luego esta memoria para poder reutilizarla en el futuro.

Un saludo.


En línea

YuseTist


Desconectado Desconectado

Mensajes: 396


$~*|_


Ver Perfil
Re: Consulta - Introducir varios datos en Struct [C++]
« Respuesta #2 en: 9 Marzo 2015, 17:18 pm »

Buenas,

Gracias @eferion por tu respuesta, gracias a ello me he estructurado como bien dices.

Ahora he echo esto y va todo bien, pero otra duda que tengo es intentar buscar el dato según el nombre u otro dato que no sea el número del array.

He echo esto:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Personaje{
  6. char nombre[30];
  7. int edad;
  8. char empresa[30];
  9. };
  10.  
  11. int main(){
  12.  
  13. Personaje *Trabajador = new Personaje[20];
  14.  
  15. int i;
  16. int num;
  17.  
  18. for(i = 0; i < 2; i++){
  19. cout << "Nombre: ";
  20. cin >> Trabajador[i].nombre;
  21.  
  22. cout << "Edad: ";
  23. cin >> Trabajador[i].edad;
  24.  
  25. cout << "Empresa: ";
  26. cin >> Trabajador[i].empresa;
  27. }
  28.  
  29. cout << "Id del personaje: ";
  30. cin >> num;
  31.  
  32. cout << "Nombre: " << Trabajador[num].nombre << endl;
  33. cout << "Edad: " << Trabajador[num].edad << endl;
  34. cout << "Empresa: " << Trabajador[num].empresa << endl;
  35.  
  36. cin.get();
  37. return 0;
  38. }

He intentado cambiar la variable 'i' pero entonces ya el for no haría su funcionamiento bien. Me he quedado aquí un poco atrancado.

Gracias, saludos.
En línea

Esta página web no está disponible - Google Chrome
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Consulta - Introducir varios datos en Struct [C++]
« Respuesta #3 en: 9 Marzo 2015, 17:49 pm »

Iteras el array y, para cada elemento, compruebas si los parámetros de dicho elemento coinciden con los buscados:

Código
  1. std::string nombre;
  2. std::cout << "Nombre del trabajador: " << std::endl;
  3. std::cin >> nombre;
  4.  
  5. for( int i=0; i < 20; i++ )
  6. {
  7.  if ( Trabajador[i].nombre == nombre )
  8.  {
  9.    std::cout << "Nombre: " << Trabajador[i].nombre << std::endl;
  10.    std::cout << "Edad: " << Trabajador[num].edad << std::endl;
  11.    std::cout << "Empresa: " << Trabajador[num].empresa << std::endl;
  12.  }
  13. }

PD.: si usas "new", asegúrate de hacer "delete" cuando ya no vayas a usar el array para liberar la memoria
En línea

YuseTist


Desconectado Desconectado

Mensajes: 396


$~*|_


Ver Perfil
Re: Consulta - Introducir varios datos en Struct [C++]
« Respuesta #4 en: 9 Marzo 2015, 18:35 pm »

Gracias de nuevo.

La función la cumple bien, dentro del bucle, lo que si que no se ejecuta al introducir 2 veces los datos.

Y el resultado quedaría así:




He intentado sacando el if del bucle y cumple una función y la otra no:



- Se introduce las dos veces los datos seguidos y luego te pide el nombre, pero al ingresarlo no te muestra el contenido del if.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Personaje{
  6. char nombre[30];
  7. int edad;
  8. char empresa[30];
  9. };
  10.  
  11. int main(){
  12.  
  13. Personaje *Trabajador = new Personaje[20]; // Reservamos espacio con new
  14.  
  15. int i;
  16. string nombre;
  17.  
  18. for(i = 0; i < 2; i++){ // Se repite el proceso hasta 2 veces
  19. cout << "Nombre: ";
  20. cin >> Trabajador[i].nombre;
  21.  
  22. cout << "Edad: ";
  23. cin >> Trabajador[i].edad;
  24.  
  25. cout << "Empresa: ";
  26. cin >> Trabajador[i].empresa;
  27.  
  28. delete Trabajador; // Liberamos memoria
  29. }
  30.  
  31. cout << "Introduce el nombre del trabajador: ";
  32. cin >> nombre;
  33.  
  34. if(nombre == Trabajador[i].nombre){ // Comprobamos si el arrai es igual a la variable
  35.    cout << "Nombre: " << Trabajador[i].nombre << endl;
  36.    cout << "Edad: " << Trabajador[i].edad << endl;
  37.    cout << "Empresa: " << Trabajador[i].empresa << endl;
  38. }else;
  39.  
  40. cin.get();
  41. return 0;
  42. }

PD: Liberé memoria según me aconsejaste:
Código
  1. delete Trabajador; // Liberamos memoria

Saludos.
« Última modificación: 9 Marzo 2015, 18:37 pm por YuseTist » En línea

Esta página web no está disponible - Google Chrome
YuseTist


Desconectado Desconectado

Mensajes: 396


$~*|_


Ver Perfil
Re: Consulta - Introducir varios datos en Struct [C++]
« Respuesta #5 en: 9 Marzo 2015, 22:03 pm »

Gracias por la ayuda,

Ya conseguí solucionarlo.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Personaje
  6. {
  7.    char nombre[30];
  8.    int edad;
  9.    char empresa[30];
  10. };
  11.  
  12. int main()
  13. {
  14.  
  15.    Personaje *Trabajador = new Personaje[20]; // Reservamos espacio con new
  16.    const int TotalTrabajadores = 2;
  17.  
  18.    int i;
  19.    string nombre;
  20.  
  21.    for(i = 0; i < TotalTrabajadores; i++)
  22.    {
  23.        cout << "Nombre: ";
  24.        cin >> Trabajador[i].nombre;
  25.  
  26.        cout << "Edad: ";
  27.        cin >> Trabajador[i].edad;
  28.  
  29.        cout << "Empresa: ";
  30.        cin >> Trabajador[i].empresa;
  31.    }
  32.  
  33.    cout << "Introduce el nombre del trabajador: ";
  34.    cin >> nombre;
  35.    for (int i = 0; i < TotalTrabajadores; i++) //un bucle para recorrer todos los trabajadores posibles
  36.    {
  37.        if(nombre == Trabajador[i].nombre)
  38.        {
  39.            cout << "Nombre: " << Trabajador[i].nombre << endl;
  40.            cout << "Edad: " << Trabajador[i].edad << endl;
  41.            cout << "Empresa: " << Trabajador[i].empresa << endl;
  42.        }
  43.    }
  44.  
  45.    cin.get();
  46.    delete[] Trabajador; // Liberamos memoria
  47.    return 0;
  48. }

Necesitaba otro bucle para recorrerlo .

Saludos.
En línea

Esta página web no está disponible - Google Chrome
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines