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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda para encontrar el problema en mi código.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda para encontrar el problema en mi código.  (Leído 5,772 veces)
temporalEotw

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Necesito ayuda para encontrar el problema en mi código.
« en: 18 Febrero 2021, 15:32 pm »

Buenos días/tardes/noches. Hago este post como último recurso para intentar encontrar un "bug" en mi código, el cual no deja que el programa se ejecute correctamente.

EXPLICACIÓN: Como dice el ejercicio en el código, necesito hacer un programa que almacene clientes de un banco en una cola para posteriormente mostrarlos de forma ordenada, en teoría ya tengo el código hecho pero, por alguna razón que desconozco al momento de ejecutar el programa este deja de funcionar...

Por favor, si no es molestia ayúdenme. De paso acepto consejos para mejorar y/o optimizar mi código, gracias!

CÓDIGO:

Código
  1. /*
  2.     Hacer un programa que guarde datos de clientes de un banco, los almacene en cola, y
  3.     por ultimo muestre los clientes en el orden correcto.
  4. */
  5.  
  6. #include <iostream>
  7. #include <conio.h>
  8.  
  9. #define DEFAULT_BALANCE 500
  10.  
  11. /*******************************************************************************************************************************/
  12.  
  13. struct Account
  14. {
  15. double balance;
  16. char name[60];
  17. int id, age;
  18. };
  19.  
  20. struct Node
  21. {
  22. Account account;
  23. Node * next;
  24. };
  25.  
  26. /*******************************************************************************************************************************/
  27.  
  28. void insert_into_queue(Node *&, Node *&, Account);
  29. void create_account(Node *&, Node *&, int&);
  30. void delete_queue(Node *&, Node *&, int&);
  31. void show_accounts(Node *, Node *);
  32. bool empty(Node * front);
  33. int menu();
  34.  
  35. /*******************************************************************************************************************************/
  36.  
  37. int main()
  38. {
  39. Node * front, * back;
  40. int option, amount = 0;
  41.  
  42. do
  43. {
  44. option = menu();
  45.  
  46. switch (option)
  47. {
  48. case 1: create_account(front, back, amount);
  49. case 2: show_accounts(front, back);
  50. case 3: delete_queue(front, back, amount);
  51. case 4: exit(0);
  52.  
  53. default: break;
  54. }
  55. }  while (option != 4);
  56.  
  57. return 0;
  58. }
  59.  
  60. /*******************************************************************************************************************************/
  61.  
  62. int menu()
  63. {
  64. int option;
  65.  
  66. do
  67. {
  68. system("cls");
  69.  
  70. std::cout << "\n\t> 1. Registrar una cuenta.";
  71. std::cout << "\n\t> 2. Mostrar cuentas registradas.";
  72. std::cout << "\n\t> 3. Eliminar las cuentas registradas.";
  73. std::cout << "\n\t> 4. Salir del programa.";
  74.  
  75. std::cout << "\n\n\t> Opcion: ";
  76. std::cin >> option;
  77. std::cin.ignore(256, '\n');
  78. } while (option < 1 || option > 4);
  79.  
  80. return option;
  81. }
  82. /*******************************************************************************************************************************/
  83.  
  84. bool empty(Node * front)
  85. {
  86. return (front == NULL) ? true : false;
  87. }
  88.  
  89. /*******************************************************************************************************************************/
  90.  
  91. void create_account(Node *& front, Node *& back, int& amount)
  92. {
  93. system("cls");
  94.  
  95. Account account;
  96.  
  97. std::cout << "\n\t> Nombre Apellido: "; std::cin.getline(account.name, 60);
  98. std::cout << "\t> Edad: "; std::cin >> account.age;
  99. std::cin.ignore(256, '\n');
  100.  
  101. account.balance = DEFAULT_BALANCE;
  102. account.id = amount;
  103.  
  104. amount++;
  105. insert_into_queue(front, back, account);
  106. }
  107.  
  108. /*******************************************************************************************************************************/
  109.  
  110. void insert_into_queue(Node *& front, Node *& back, Account account)
  111. {
  112. Node * new_node = new Node();
  113.  
  114. new_node->account = account
  115. new_node->next = NULL;
  116.  
  117. if (empty(front))
  118. front = new_node;
  119. else
  120. back->next = new_node;
  121.  
  122. back = new_node;
  123.  
  124. std::cout << "\n\t> Cuenta (identificador: " << account.id << ") registrada correctamente.";
  125. _getch();
  126. }
  127.  
  128. /*******************************************************************************************************************************/
  129.  
  130. void show_accounts(Node * front, Node * back)
  131. {
  132. system("cls");
  133.  
  134. if (!empty(front))
  135. {
  136. while (!empty(front))
  137. {
  138.  
  139. Account account = front->account;
  140.  
  141. std::cout << "\n\t> Cuenta numero " << account.id << ".\n";
  142.  
  143. std::cout << "\n\t> Nombre Apellido: " << account.name << ".";
  144. std::cout << "\n\t> Edad: " << account.age << ".";
  145. std::cout << "\n\t> Balance: " << account.balance << ".";
  146.  
  147. if (front == back)
  148. break;
  149. else
  150. front = front->next;
  151.  
  152. std::cout << "\n\t> Presione una tecla para ver la siguiente cuenta.";
  153. }
  154. }
  155. else
  156. std::cout << "\n\t> No hay cuentas registradas!";
  157.  
  158. _getch();
  159. }
  160.  
  161. /*******************************************************************************************************************************/
  162.  
  163. void delete_queue(Node *& front, Node *& back, int& amount)
  164. {
  165. amount = 0;
  166.  
  167. if (!empty(front))
  168. {
  169. while (!empty(front))
  170. {
  171. Node * temp = front;
  172.  
  173. if (front == back)
  174. {
  175. front = NULL;
  176. back = NULL;
  177. }
  178. else
  179. front = front->next;
  180.  
  181. delete temp;
  182. }
  183.  
  184. std::cout << "\n\t> Cuentas eliminadas correctamente.";
  185. }
  186. else
  187. std::cout << "\n\t> No hay cuentas registradas!";
  188.  
  189. _getch();
  190. }


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Necesito ayuda para encontrar el problema en mi código.
« Respuesta #1 en: 18 Febrero 2021, 20:23 pm »

Probaste a utilizar un debugger? gdb es bastante sencillo. Y/O haz una función que haga cout y la llamas tras cada linea del programa. debuggear("linea1") //hasta linea 1 funciona.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

temporalEotw

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Necesito ayuda para encontrar el problema en mi código.
« Respuesta #2 en: 18 Febrero 2021, 22:59 pm »

Ya pillé el error, gracias! Debía de inicializar las variables o bueno, punteros front y back en NULL, por eso obtenía el error.

Al final el código me quedó así:

Código
  1. /*
  2.     Hacer un programa que guarde datos de clientes de un banco, los almacene en cola, y
  3.     por ultimo muestre los clientes en el orden correcto.
  4. */
  5.  
  6. #include <iostream>
  7. #include <conio.h>
  8.  
  9. #define DEFAULT_BALANCE 500
  10.  
  11. /*******************************************************************************************************************************/
  12.  
  13. struct Account
  14. {
  15. double balance;
  16. char name[60];
  17. int id, age;
  18. };
  19.  
  20. struct Node
  21. {
  22. Account * account;
  23. Node * next;
  24. };
  25.  
  26. /*******************************************************************************************************************************/
  27.  
  28. void insert_into_queue(Node *&, Node *&, Account *);
  29. void create_account(Node *&, Node *&, int&);
  30. void delete_queue(Node *&, Node *&, int&);
  31. void show_accounts(Node *, Node *);
  32. bool empty(Node *);
  33. int menu();
  34.  
  35. /*******************************************************************************************************************************/
  36.  
  37. int main()
  38. {
  39. Node * front = NULL, * back = NULL;
  40. int option, amount = 0;
  41.  
  42. do
  43. {
  44. option = menu();
  45.  
  46. switch (option)
  47. {
  48. case 1: create_account(front, back, amount); break;
  49. case 2: show_accounts(front, back); break;
  50. case 3: delete_queue(front, back, amount); break;
  51. case 4: exit(0);
  52.  
  53. default: break;
  54. }
  55. }  while (option != 4);
  56.  
  57. return 0;
  58. }
  59.  
  60. /*******************************************************************************************************************************/
  61.  
  62. int menu()
  63. {
  64. int option;
  65.  
  66. do
  67. {
  68. system("cls");
  69.  
  70. std::cout << "\n\t> 1. Registrar una cuenta.";
  71. std::cout << "\n\t> 2. Mostrar cuentas registradas.";
  72. std::cout << "\n\t> 3. Eliminar las cuentas registradas.";
  73. std::cout << "\n\t> 4. Salir del programa.";
  74.  
  75. std::cout << "\n\n\t> Opcion: ";
  76. std::cin >> option;
  77. std::cin.ignore(256, '\n');
  78. } while (option < 1 || option > 4);
  79.  
  80. return option;
  81. }
  82. /*******************************************************************************************************************************/
  83.  
  84. bool empty(Node * front)
  85. {
  86. return (front == NULL) ? true : false;
  87. }
  88.  
  89. /*******************************************************************************************************************************/
  90.  
  91. void create_account(Node *& front, Node *& back, int& amount)
  92. {
  93. system("cls");
  94.  
  95. Account * account = new Account();
  96.  
  97. std::cout << "\n\t> Nombre Apellido: "; std::cin.getline(account->name, 60);
  98. std::cout << "\t> Edad: "; std::cin >> account->age;
  99. std::cin.ignore(256, '\n');
  100.  
  101. account->balance = DEFAULT_BALANCE;
  102. account->id = amount;
  103.  
  104. amount++;
  105.  
  106. insert_into_queue(front, back, account);
  107. }
  108.  
  109. /*******************************************************************************************************************************/
  110.  
  111. void insert_into_queue(Node *& front, Node *& back, Account * account)
  112. {
  113. Node * new_node = new Node();
  114.  
  115. new_node->account = account;
  116. new_node->next = NULL;
  117.  
  118. if (empty(front))
  119. front = new_node;
  120. else
  121. back->next = new_node;
  122.  
  123. back = new_node;
  124.  
  125. std::cout << "\n\t> Cuenta (identificador: " << account->id << ") registrada correctamente.";
  126. _getch();
  127. }
  128.  
  129. /*******************************************************************************************************************************/
  130.  
  131. void show_accounts(Node * front, Node * back)
  132. {
  133. if (!empty(front))
  134. {
  135. while (!empty(front))
  136. {
  137. system("cls");
  138. Account * account = front->account;
  139.  
  140. std::cout << "\n\t> Cuenta numero " << account->id << ".\n";
  141.  
  142. std::cout << "\n\t> Nombre Apellido: " << account->name << ".";
  143. std::cout << "\n\t> Edad: " << account->age << ".";
  144. std::cout << "\n\t> Balance: " << account->balance << ".";
  145.  
  146. if (front == back)
  147. {
  148. std::cout << "\n\n\t> Ultima cuenta, presione una tecla para volver al menu.";
  149. break;
  150. }
  151. else
  152. front = front->next;
  153.  
  154. std::cout << "\n\n\t> Presione una tecla para ver la siguiente cuenta.";
  155. _getch();
  156. }
  157. }
  158. else
  159. std::cout << "\n\t> No hay cuentas registradas!";
  160.  
  161. _getch();
  162. }
  163.  
  164. /*******************************************************************************************************************************/
  165.  
  166. void delete_queue(Node *& front, Node *& back, int& amount)
  167. {
  168. amount = 0;
  169.  
  170. if (!empty(front))
  171. {
  172. while (!empty(front))
  173. {
  174. Node * temp = front;
  175.  
  176. if (front == back)
  177. {
  178. front = NULL;
  179. back = NULL;
  180. }
  181. else
  182. front = front->next;
  183.  
  184. delete temp;
  185. }
  186.  
  187. std::cout << "\n\t> Cuentas eliminadas correctamente.";
  188. }
  189. else
  190. std::cout << "\n\t> No hay cuentas registradas!";
  191.  
  192. _getch();
  193. }
  194.  
« Última modificación: 18 Febrero 2021, 23:10 pm por temporalEotw » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito ayuda encontrar codigo/programa
Programación Visual Basic
Goldmoon 3 2,384 Último mensaje 19 Mayo 2008, 19:15 pm
por Karcrack
Necesito su ayuda para encontrar un software de consola
GNU/Linux
leogtz 2 2,812 Último mensaje 14 Febrero 2012, 23:52 pm
por leogtz
Necesito ayuda para encontrar a alguien
Hacking
MonologueBankrupt 4 5,041 Último mensaje 29 Octubre 2017, 14:50 pm
por Code99
Necesito ayuda con encontrar un codigo de triangulacion:
Programación C/C++
sergioADL 0 1,722 Último mensaje 16 Mayo 2018, 23:39 pm
por sergioADL
Necesito el mejor VPN aunque sea de pago. « 1 2 »
Redes
padovano 10 22,170 Último mensaje 15 Mayo 2022, 17:22 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines