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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda de switch y problema al ejecutar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda de switch y problema al ejecutar  (Leído 1,954 veces)
Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
Duda de switch y problema al ejecutar
« en: 18 Mayo 2015, 20:40 pm »

 Hola gente, tengo unas dudas con un switch y quisiera saber como hacer para que al ingresar eof (ctrl + z en windows, ctrl + d en linux) no se me cierre el programa y se ejecuten las otras funciones miembro.


Mi duda del switch es la siguiente en la funcion miembro recibirCalificaciones
si se ingresa por ejemplo " a" (espacio,y letra a), toma calificacion como "a", y quisiera saber por que, porque creo yo que tendria que entrar en default y no, se que evita los saltos de lineas, espacios y espacios tabulares, pero quisiera saber que pasa en ese cuerpo cuando tenemos un espacio y letra a.


Desde ya muchas gracias y Saludos!

Bueno este es el código:

main.cpp
Código
  1. #include <iostream>
  2. using std::cin;
  3.  
  4. #include "LibroCalificaciones.h"
  5.  
  6. int main()
  7. {
  8. LibroCalificaciones miLibroCalificaciones("CS101 Programacion en C++");
  9.  
  10. miLibroCalificaciones.mostrarMensaje();
  11. miLibroCalificaciones.recibirCalificaciones();
  12. miLibroCalificaciones.mostrarReporteCalificaciones();
  13. cin.get();
  14. return 0;
  15. }

LibroCalificaciones.h
Código
  1. #include <string>
  2. using std::string;
  3.  
  4. class LibroCalificaciones
  5. {
  6. public:
  7. LibroCalificaciones(string);
  8. void establecerNombreCurso(string);
  9. string obtenerNombreCurso();
  10. void mostrarMensaje();
  11. void recibirCalificaciones();
  12. void mostrarReporteCalificaciones();
  13. private:
  14. string nombreCurso;
  15. int aCuenta;
  16. int bCuenta;
  17. int cCuenta;
  18. int dCuenta;
  19. int fCuenta;
  20. };
LibroCalificaciones.cpp
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include "LibroCalificaciones.h"
  7.  
  8. //CONSTRUCTOR
  9. LibroCalificaciones::LibroCalificaciones(string nombre)
  10. {
  11. establecerNombreCurso(nombre);
  12. aCuenta=0;
  13. bCuenta=0;
  14. cCuenta=0;
  15. dCuenta=0;
  16. fCuenta=0;
  17. }
  18.  
  19. void LibroCalificaciones::establecerNombreCurso(string nombre)
  20. {
  21. if (nombre.length() <= 25)
  22. {
  23. nombreCurso= nombre;
  24. }
  25. else
  26. {
  27. nombreCurso= nombre.substr(0,25);
  28.  
  29. cout <<"el nombre " <<nombre <<" excede la longitud maxima (25).\n"
  30. <<"Se limito nombreCurso a los primeros 25 caracteres.\n";
  31. }
  32. }
  33.  
  34. string LibroCalificaciones::obtenerNombreCurso()
  35. {
  36. return nombreCurso;
  37. }
  38.  
  39. void LibroCalificaciones::mostrarMensaje()
  40. {
  41. cout <<"Bienvenido al libro de calificaciones para " <<obtenerNombreCurso() <<"!\n";
  42. }
  43.  
  44. void LibroCalificaciones::recibirCalificaciones()
  45. {
  46. int calificacion;
  47.  
  48. cout <<"Escriba las calificaciones de letra." <<endl
  49. <<"Escriba el caracter EOF (fin de archivo) para terminar la entrada." <<endl;
  50.  
  51. while ((calificacion= cin.get()) != EOF)
  52. {
  53. switch (calificacion)
  54. {
  55. case 'A':
  56. case 'a':
  57. aCuenta++;
  58. break;
  59.  
  60. case 'B':
  61. case 'b':
  62. bCuenta++;
  63. break;
  64.  
  65. case 'C':
  66. case 'c':
  67. cCuenta++;
  68. break;
  69.  
  70. case 'D':
  71. case 'd':
  72. dCuenta++;
  73. break;
  74.  
  75. case 'F':
  76. case 'f':
  77. fCuenta++;
  78. break;
  79.  
  80. case '\t':
  81. case '\n':
  82. case ' ':
  83. break;
  84.  
  85. default:
  86. cout <<"Se introdujo una letra de calificacion incorrecta."
  87. <<"Escriba una nueva calificacion." <<endl;
  88. break;
  89. }
  90. }
  91. }
  92.  
  93. void LibroCalificaciones::mostrarReporteCalificaciones()
  94. {
  95. cout <<"\n\nNumero de estudiantes que recibieron cada Calificacion de letra:"
  96. <<"\nA: " <<aCuenta
  97. <<"\nB: " <<bCuenta
  98. <<"\nC: " <<cCuenta
  99. <<"\nD: " <<dCuenta
  100. <<"\nF: " <<fCuenta
  101. <<endl;
  102. }


« Última modificación: 19 Mayo 2015, 01:34 am por Mario Olivera » En línea

NOIS

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: Duda de switch y problema al ejecutar
« Respuesta #1 en: 20 Mayo 2015, 13:37 pm »

Respecto a lo de (Ctrl+z) no puedes evitar que termine el programa ya que es el atajo de teclado para interrumpir la ejecución de cualquier comando, función o programa en la terminal.

En el caso del switch, si pones "a a" solo leerá "a", ya que cin.get() no admite espacios para una misma lectura, en su defecto, para leer un linea utiliza cin.gets() para leer cadenas.

Saludos!


En línea

NOIS dev7
Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
Re: Duda de switch y problema al ejecutar
« Respuesta #2 en: 20 Mayo 2015, 15:45 pm »

 Entonces en un while nunca se pone EOF porque terminaria el programa sin ejecutar lo que está después de la estructura while?

con respecto al switch mi duda es sobre los espacios, que no pide de nuevo la calificacion si se escribe " a"
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda de switch y problema al ejecutar
« Respuesta #3 en: 20 Mayo 2015, 20:51 pm »

istream::get() coge solo un caracter del buffer de entrada.

Si introduces " a", cin.get() cogerá primero ' ' y luego 'a'.


Código
  1. case ' ':
  2. break;

Ese case hará break al switch, con lo que el bucle pedirá nueva letra ('a').
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sentencia switch
Programación C/C++
netca 3 2,859 Último mensaje 27 Julio 2012, 05:17 am
por avesudra
duda sobre la velocidad de switch
Redes
lui90 0 1,661 Último mensaje 20 Septiembre 2012, 21:47 pm
por lui90
duda con switch
Redes
General Dmitry Vergadoski 5 3,683 Último mensaje 25 Marzo 2013, 01:30 am
por Platanito Mx
Duda tonta switch
Programación C/C++
Choke1 8 3,388 Último mensaje 4 Noviembre 2014, 19:54 pm
por El Benjo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines