Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: RiCo9297 en 16 Diciembre 2016, 20:26 pm



Título: Problema con cin.getline
Publicado por: RiCo9297 en 16 Diciembre 2016, 20:26 pm
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int numCitas = 10;
  5. const int KNOMBRE = 40;
  6. const int KDNI = 9;
  7.  
  8. typedef struct{
  9. int dia, mes, anyo;
  10. }Fecha;
  11.  
  12. typedef struct{
  13. int h, m;
  14. }Hora;
  15.  
  16. typedef struct{
  17. char dni[KDNI];
  18. char nombrePaciente[KNOMBRE];
  19. }Paciente;
  20.  
  21. typedef struct{
  22. Fecha fecha;
  23. Hora hora;
  24. char nombreFisio[KNOMBRE];
  25. int tipoTratamiento;
  26. Paciente paciente;
  27. }Cita;
  28.  
  29. typedef struct{
  30. Cita cita[numCitas];
  31. int numCitas;
  32. int cuantas = 1;
  33. }Citas;
  34.  
  35. void leerFecha(Fecha &f){
  36. do{
  37. cout << "Dia: ";
  38. cin >> f.dia;
  39. }while(f.dia < 1 || f.dia > 31);
  40. do{
  41. cout << "Mes: ";
  42. cin >> f.mes;
  43. }while(f.mes < 1 || f.mes > 12);
  44. do{
  45. cout << "Año: ";
  46. cin >> f.anyo;
  47. }while(f.anyo < 0);
  48. cin.get();
  49. }
  50.  
  51. void imprimirFecha(Fecha f){
  52. cout << "Dia: " << f.dia << endl;
  53. cout << "Mes: " << f.mes << endl;
  54. cout << "Año: " << f.anyo << endl;
  55. }
  56.  
  57. void leerHora(Hora &h){
  58. do{
  59. cout << "Hora: ";
  60. cin >> h.h;
  61. }while(h.h < 0 || h.h > 23);
  62. do{
  63. cout << "Minuto: ";
  64. cin >> h.m;
  65. }while(h.m < 0 || h.m > 59);
  66. cin.get();
  67. }
  68.  
  69. void imprimirHora(Hora h){
  70. cout << "Hora: " << h.h << endl;
  71. cout << "Minuto: " << h.m << endl;
  72. }
  73.  
  74. void leerPaciente(Paciente &p){
  75. cout << "DNI: ";
  76. cin.getline(p.dni, KDNI);
  77. cin.get();
  78. cout << "Nombre: " ;
  79. cin.getline(p.nombrePaciente, KNOMBRE);
  80. cin.get();
  81. }
  82.  
  83. void imprimirPaciente(Paciente p){
  84. cout << "DNI: " << p.dni << endl;
  85. cout << "Nombre: " << p.nombrePaciente << endl;
  86. }
  87.  
  88. void leerCita(Cita &c){
  89. cout << "**** SOLICITUD DE CITA ****" << endl;
  90. cout << "Introduzca fecha: " << endl;
  91. leerFecha(c.fecha);
  92. cout << "Introduzca la hora: " << endl;
  93. leerHora(c.hora);
  94. cout << "Nombre del fisioterapeuta: ";
  95. cin.getline(c.nombreFisio, KNOMBRE);
  96. cout << "Tipo de tratamiento (1.Masaje, 2.Lesion, 3.Rehabilitacion): ";
  97. cin >> c.tipoTratamiento;
  98. cout << "Introduzca los datos del paciente: " << endl;
  99. leerPaciente(c.paciente);
  100. }
  101.  
  102. void imprimirCita(Cita c){
  103. cout << "***** CITA *******" << endl;
  104. cout << "FECHA: " << endl;
  105. imprimirFecha(c.fecha);
  106. cout << "HORA DE LA CITA: " << endl;
  107. imprimirHora(c.hora);
  108. cout << "Nombre del fisioterapeuta: " << c.nombreFisio << endl;
  109. cout << "Tipo de tratatimiento: ";
  110. switch(c.tipoTratamiento){
  111. case 1:
  112. cout << "Masaje " << endl;
  113. break;
  114. case 2:
  115. cout << "Lesion" << endl;
  116. break;
  117. case 3:
  118. cout << "Rehabilitacion" << endl;
  119. break;
  120. }
  121. }
  122.  
  123. void pedirCitas(Citas &cit){
  124. if(cit.cuantas < cit.numCitas){
  125. leerCita(cit.cita[cit.cuantas]);
  126. cit.cuantas++;
  127. }
  128. else{
  129. cout << "No se admiten mas citas" << endl;
  130. }
  131. }
  132.  
  133. void imprimirCitas(Citas cit){
  134. int i;
  135. for(i = 1; i <= cit.cuantas; i++){
  136. imprimirCita(cit.cita[i]);
  137. }
  138. cout << endl;
  139. }
  140.  
  141. int main(){
  142. int opcion;
  143. Citas c;
  144. do{
  145. cout << "********** SERVICIO DE FISIOTERAPIA ************** " << endl;
  146. cout << "Seleccione una opcion del menu: " << endl;
  147. cout << "1. Pedir una cita " << endl;
  148. cout << "2. Anular una cita " << endl;
  149. cout << "3. Mostrar listado de citas " << endl;
  150. cout << "4. Mostrar facturacion de un fisioterapeuta " << endl;
  151. cout << "5. Salir " << endl;
  152. cout << "Opcion: " << endl;
  153. cin >> opcion;
  154. switch(opcion){
  155. case 1:
  156. pedirCitas(c);
  157. break;
  158. case 2:
  159. break;
  160. case 3:
  161. imprimirCitas(c);
  162. break;
  163. case 4:
  164. break;
  165. case 5:
  166. break;
  167. default:
  168. cout << "OPCION INCORRECTA " << endl;
  169. }
  170. }while(opcion != 5);
  171. }

En el modulo leerPaciente hay puesto dos cin.getline, el primero lee un dni que es una cadena de caracteres de tipo paciente(la estructura) y otro que lee el nombre del paciente que es otra cadena de caracteres del mismo tipo, el problema esta en que al introducir el nombre el programa me entra en un bucle, como puedo solucionarlo GRACIASSSS  :-* :-* :-* :-* :-*