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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  modificar lectura de cadenas(Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: modificar lectura de cadenas(Solucionado)  (Leído 2,206 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
modificar lectura de cadenas(Solucionado)
« en: 7 Diciembre 2018, 02:12 am »

Hola a todos, miren estaba repasando un poco de lo que vi en Estructura de Datos y rehaciendo todo de nuevo y me encuentro que este modulo llamado crear_nodo(nodo nuevo); le pide al usuario ingresar enteros y cadenas y yo habia utilizado el gets(cadena); y la funcion fflush(stdin); para limpiar el buffer el punto es que no me gusto para nada colocar el fflush(stdin); antes y despues de leer una cadena con gets(cadena); si alguien sabe de alguna forma mas estetica me ayuda porfis?
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. const int MAX=32;
  8. typedef char tcad[MAX];
  9. typedef struct tfecha{
  10. int dia;
  11. int mes;
  12. int anyo;
  13. };
  14. typedef struct tdomicilio{
  15. tcad calle;
  16. int numero;
  17. tcad barrio;
  18. tcad localidad;
  19. };
  20. typedef struct tvehiculo{
  21. tcad marca;
  22. tcad modelo;
  23. tcad patente;
  24. };
  25. typedef struct thorario{
  26. tcad entrada;
  27. tcad salida;
  28. };
  29. typedef struct tchofer{
  30. int legajo;
  31. tcad apellido;
  32. tcad nombre;
  33. int DNI;
  34. tfecha fecha_nacimiento;
  35. tdomicilio domicilio;
  36. tvehiculo vehiculo_asignado;
  37. thorario horario_trabajo;
  38. int horas_extras;
  39. };
  40. typedef struct tnodo *pnodo;
  41. typedef struct tnodo{
  42. tchofer dato;
  43. pnodo sig;
  44. };
  45.  
  46. void iniciar_lista(pnodo &lista);
  47. void crear_nodo(pnodo &nuevo);
  48. void agregar_final(pnodo &lista, pnodo nuevo);
  49. void listar_choferes(pnodo lista, tcad buscado);
  50. void listar_chofer_horas_extras(pnodo lista);
  51. void nueva_cadena(tcad &cadena);
  52.  
  53. int main()
  54. {
  55. int opcion;
  56. pnodo milista, nuevo;
  57. tcad buscado;
  58. iniciar_lista(milista);
  59. do{
  60. system("cls");
  61. cout<<"1. Agregar chofer"<<endl;
  62. cout<<"2. Listar choferes segun horario de entrada"<<endl;
  63. cout<<"3. Listar chofer con mayor cantidad de horas extras"<<endl;
  64. cout<<"4. Salir"<<endl;
  65. cin>>opcion;
  66. switch(opcion){
  67. case 1: crear_nodo(nuevo);
  68. if(nuevo!=NULL)
  69. agregar_final(milista,nuevo);
  70. break;
  71. case 2: cout<<"Ingrese hora: ";
  72. nueva_cadena(buscado);
  73. listar_choferes(milista,buscado);break;
  74. case 3: listar_chofer_horas_extras(milista);break;
  75. case 4: cout<<"FIN DEL PROGRAMA"<<endl;break;
  76. default: cout<<"Opcion incorrecta"<<endl;
  77. }
  78. system("pause");
  79. }while(opcion!=4);
  80. }
  81.  
  82. void iniciar_lista(pnodo &lista)
  83. {
  84. lista=NULL;
  85. }
  86.  
  87. void crear_nodo(pnodo &nuevo)
  88. {
  89. nuevo=new tnodo;
  90. if(nuevo!=NULL){
  91. cout<<"Ingrese datos personales"<<endl;
  92. cout<<"Legajo: ";
  93. cin>>nuevo->dato.legajo;
  94. cout<<"Apellido: ";
  95. nueva_cadena(nuevo->dato.apellido);
  96. cout<<"Nombre: ";
  97. nueva_cadena(nuevo->dato.nombre);
  98. cout<<"DNI: ";
  99. cin>>nuevo->dato.DNI;
  100. cout<<"Fecha de nacimiento"<<endl;
  101. cout<<"Dia: ";
  102. cin>>nuevo->dato.fecha_nacimiento.dia;
  103. cout<<"Mes: ";
  104. cin>>nuevo->dato.fecha_nacimiento.mes;
  105. cout<<"Año: ";
  106. cin>>nuevo->dato.fecha_nacimiento.anyo;
  107. cout<<"Domicilio"<<endl;
  108. cout<<"Calle: ";
  109. nueva_cadena(nuevo->dato.domicilio.calle);
  110. cout<<"Numero: ";
  111. cin>>nuevo->dato.domicilio.numero;
  112. cout<<"Barrio: ";
  113. nueva_cadena(nuevo->dato.domicilio.barrio);
  114. cout<<"Localidad: ";
  115. nueva_cadena(nuevo->dato.domicilio.localidad);
  116. cout<<"Vehiculo asignado"<<endl;
  117. cout<<"Marca: ";
  118. nueva_cadena(nuevo->dato.vehiculo_asignado.marca);
  119. cout<<"Modelo: ";
  120. nueva_cadena(nuevo->dato.vehiculo_asignado.modelo);
  121. cout<<"Patente: ";
  122. nueva_cadena(nuevo->dato.vehiculo_asignado.patente);
  123. cout<<"Horario entrada: ";
  124. nueva_cadena(nuevo->dato.horario_trabajo.entrada);
  125. cout<<"Horario salida: ";
  126. nueva_cadena(nuevo->dato.horario_trabajo.salida);
  127. cout<<"Horas extras: ";
  128. cin>>nuevo->dato.horas_extras;
  129. nuevo->sig=NULL;
  130. }
  131. else
  132. cout<<"MEMORIA INSUFICIENTE"<<endl;
  133. }
  134.  
  135. void agregar_final(pnodo &lista, pnodo nuevo)
  136. {
  137. pnodo i;
  138. if(lista==NULL)
  139. lista=nuevo;
  140. else{
  141. for(i=lista;i->sig!=NULL;i=i->sig);
  142. i->sig=nuevo;
  143. }
  144. }
  145.  
  146. void listar_choferes(pnodo lista, tcad buscado)
  147. {
  148. int cantidad=0;
  149. pnodo i;
  150. if(lista!=NULL){
  151. for(i=lista;i!=NULL;i=i->sig){
  152. if(strcmp(i->dato.horario_trabajo.entrada,buscado)==0){
  153. cout<<"Chofer"<<endl;
  154. cout<<"Nombre: "<<i->dato.nombre<<endl;
  155. cout<<"Apellido: "<<i->dato.apellido<<endl;
  156. cout<<"Patente de vehiculo asignado: "<<i->dato.vehiculo_asignado.patente<<endl<<endl;
  157. cantidad++;
  158. }
  159. }
  160. cout<<"Cantidad de choferes: "<<cantidad<<endl;
  161. }
  162. else
  163. cout<<"LISTA VACIA"<<endl;
  164. }
  165.  
  166. void listar_chofer_horas_extras(pnodo lista)
  167. {
  168. pnodo i, chofer;
  169. if(lista!=NULL){
  170. chofer=lista;
  171. for(i=lista;i!=NULL;i=i->sig){
  172. if(i->dato.horas_extras>chofer->dato.horas_extras)
  173. chofer=i;
  174. }
  175. cout<<"Chofer con mayor cantidad de horas extras"<<endl;
  176. cout<<"Nombre: "<<chofer->dato.nombre<<endl;
  177. cout<<"Apellido: "<<chofer->dato.apellido<<endl;
  178. cout<<"DNI: "<<chofer->dato.DNI<<endl;
  179. cout<<"Horas extras: "<<chofer->dato.horas_extras<<endl;
  180. }
  181. else
  182. cout<<"LISTA VACIA"<<endl;
  183. }
  184.  
  185. void nueva_cadena(tcad &cadena)
  186. {
  187. fflush(stdin);
  188. gets(cadena);
  189. fflush(stdin);
  190. }


« Última modificación: 7 Diciembre 2018, 03:43 am por Beginner Web » En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: modificar lectura de cadenas
« Respuesta #1 en: 7 Diciembre 2018, 02:34 am »

crear una funcion que reciba el string a mostrar y que internamente haga el cout, el fgets o gets y el fflush.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: modificar lectura de cadenas
« Respuesta #2 en: 7 Diciembre 2018, 02:42 am »

Intentaré darte un par de ideas por si quieres aplicar alguna:
- En primer lugar yo en C++ prefiero usar <string> en lugar de cadenas de caracteres C ya que creo que facilitan algunas tareas. Y para coger los datos uso <cin> de <iostream> en vez de <gets()> de <cstdio>.
- Si por lo que sea prefieres seguir usando cadenas de caracteres, cambiaría los <gets()> por <fgets()>.
- Para evitar los <fflush(stdin)> hay un par de temas en el foro que creo que ya has visto. Tienes la opción de usar <fseek()> para ponerte al final del buffer si hay más caracteres de los admitidos o si te quedan saltos de línea puedes capturarlos con un <getchar()> hasta que no quede ninguno. Eso ya depende de lo que necesite tu programa.
Suerte. :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: modificar lectura de cadenas
« Respuesta #3 en: 7 Diciembre 2018, 02:55 am »

crear una funcion que reciba el string a mostrar y que internamente haga el cout, el fgets o gets y el fflush.
Me gusta la idea pero el cout no es para funciones y no estaria bien ya que los mensajes que para pedir al usuario el dato son diferentes aplicare igual la "funcion", me quedo mejor y mas compacto, gracias  ;-)
Código
  1. void nueva_cadena(tcad &cadena)
  2. {
  3. fflush(stdin);
  4. gets(cadena);
  5. fflush(stdin);
  6. }
« Última modificación: 7 Diciembre 2018, 03:26 am por Beginner Web » En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: modificar lectura de cadenas(Solucionado)
« Respuesta #4 en: 7 Diciembre 2018, 04:26 am »

El cout no es para funciones?
No se que quisiste decir.
Algo así quise decir yo.
Código
  1. void pedir(char *mensaje) {
  2.   // Posiblemente algunas instrucciones antes
  3.   cout << mensaje;
  4.   // Otras instrucciones antes
  5. }

Instrucciones antes o después pueden ser los fflush, etc.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: modificar lectura de cadenas(Solucionado)
« Respuesta #5 en: 7 Diciembre 2018, 05:47 am »

El cout no es para funciones?
No se que quisiste decir.
Algo así quise decir yo.
Código
  1. void pedir(char *mensaje) {
  2.   // Posiblemente algunas instrucciones antes
  3.   cout << mensaje;
  4.   // Otras instrucciones antes
  5. }

Instrucciones antes o después pueden ser los fflush, etc.
ahh procedimientos si, pero igual no va funcionar
En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: modificar lectura de cadenas(Solucionado)
« Respuesta #6 en: 7 Diciembre 2018, 05:53 am »

Dices sentencias pero no das argumentas.
Que es lo que "no va a funcionar" y por que dices que no va a funcionar?




En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: modificar lectura de cadenas(Solucionado)
« Respuesta #7 en: 12 Diciembre 2018, 06:25 am »

Dices sentencias pero no das argumentas.
Que es lo que "no va a funcionar" y por que dices que no va a funcionar?





Perdon, tienes razon me confundí, claro que si va funcionar pero no de la manera que yo quiero
En línea

7w7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 12,971 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
[Solucionado] Problema de lectura de ficheros
.NET (C#, VB.NET, ASP)
Kasi 2 3,733 Último mensaje 17 Julio 2009, 17:43 pm
por Kasi
Modificar cadenas en programa compilado en Delphi « 1 2 »
Ingeniería Inversa
registrymaster 18 11,953 Último mensaje 13 Septiembre 2011, 13:38 pm
por apuromafo CLS
Cadenas de caracteres solucionado
Programación General
malocha 0 1,864 Último mensaje 18 Julio 2011, 00:18 am
por malocha
[Python] Duda con comparacion de cadenas en una lectura de socket
Scripting
Príncipe_Azul 2 3,267 Último mensaje 8 Noviembre 2013, 08:39 am
por Príncipe_Azul
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines