Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BARIS514 en 4 Marzo 2020, 04:35 am



Título: TENGO PROBLEMAS CON 'SWITCH' EN UN EJERCICIO
Publicado por: BARIS514 en 4 Marzo 2020, 04:35 am
AQUI EL EJERCICIO
Código
  1. /*Figura 4.7: fig04_07.c
  2.  cuenta las calificaciones expresadas en letras */
  3. #include<stdio.h>
  4.  
  5. /*la funcion main comienza la ejecucion del programa*/
  6. int main()
  7. {
  8. int cali;
  9. int cuentaA = 0;
  10. int cuentaB = 0;
  11. int cuentaC = 0;
  12. int cuentaD = 0;
  13. int cuentaF = 0;
  14.  
  15. printf( "Introduzca la letra que corresponde a la calificacion \n" );
  16. printf("Introduzca el caracter EOF para finalizar la entrada de datos. \n");
  17.  
  18. /* repite hasta que el usuario digita la secuencia de teclas de fin
  19. de archivo*/
  20. while ( ( cali = getchar( ) ) != EOF ) {
  21. /*determina cual calificacion se introdujo*/
  22. switch (cali) { /*switch anidado dentro del while */
  23.  
  24. case 'A':
  25. case 'a':
  26. ++cuentaA;
  27. break;
  28.  
  29. case 'B':
  30. case 'b':
  31. ++cuentaB;
  32. break;
  33.  
  34. case 'C':
  35. case 'c':
  36. ++cuentaC;
  37. break;
  38.  
  39. case 'D':
  40. case 'd':
  41. ++cuentaD;
  42. break;
  43.  
  44. case 'F':
  45. case 'f':
  46. ++cuentaF;
  47. break;
  48.  
  49. case '\n':
  50. case '\t':
  51. case ' ':
  52. break;
  53.  
  54. default:
  55. printf("Introdujo una letra incorrecta.");
  56. printf(" Introduzca una nueva calificacion \n");
  57.        break;
  58. }
  59.  
  60. }
  61.  
  62.  
  63. printf("\nLos totales por calificacion son: \n");
  64. printf("A: %d\n", cuentaA);
  65. printf("B: %d\n", cuentaB);
  66. printf("C: %d\n", cuentaC);
  67. printf("D: %d\n", cuentaD);
  68. printf("F: %d\n", cuentaF);
  69.  
  70. return 0;
  71.  
  72. }
  73.  
  74.  




QUISIERA SABER PORQUE NO SALEN LOS PRINTF QUE SE MUESTRAN AL FINALIZAR EL WHILE Y EL SWITCH


Título: Re: TENGO PROBLEMAS CON 'SWITCH' EN UN EJERCICIO
Publicado por: EdePC en 4 Marzo 2020, 16:37 pm
Saludos,

- Que error te manda, porque yo no tengo problemas. Recuerda que el Caracter EOF en Windows es ^Z (Ctrl + Z o F6) y en Linux es ^D (Ctrl + D):

Citar
C:\Users\EdSon\CLionProjects\untitled\Debug>main.exe
Introduzca la letra que corresponde a la calificacion
Introduzca el caracter EOF para finalizar la entrada de datos.
abcabcaaa
^Z


Los totales por calificacion son:
A: 5
B: 2
C: 2
D: 0
F: 0

C:\Users\EdSon\CLionProjects\untitled\Debug>main.exe
Introduzca la letra que corresponde a la calificacion
Introduzca el caracter EOF para finalizar la entrada de datos.
a
a
b
b
b
^Z


Los totales por calificacion son:
A: 2
B: 3
C: 0
D: 0
F: 0

C:\Users\EdSon\CLionProjects\untitled\Debug>

-- Si estás presionando ^C (Ctrl + C) esto provoca una excepción y finaliza tu programa antes de (terminar de) imprimir tus "totales". El caracter EOF debería de ir solo en una nueva línea.


Título: Re: TENGO PROBLEMAS CON 'SWITCH' EN UN EJERCICIO
Publicado por: @XSStringManolo en 5 Marzo 2020, 02:48 am
AQUI EL EJERCICIO
Código
  1. /*Figura 4.7: fig04_07.c
  2.  cuenta las calificaciones expresadas en letras */
  3. #include<stdio.h>
  4.  
  5. /*la funcion main comienza la ejecucion del programa*/
  6. int main()
  7. {
  8. int cali;
  9. int cuentaA = 0;
  10. int cuentaB = 0;
  11. int cuentaC = 0;
  12. int cuentaD = 0;
  13. int cuentaF = 0;
  14.  
  15. printf( "Introduzca la letra que corresponde a la calificacion \n" );
  16. printf("Introduzca el caracter EOF para finalizar la entrada de datos. \n");
  17.  
  18. /* repite hasta que el usuario digita la secuencia de teclas de fin
  19. de archivo*/
  20. while ( ( cali = getchar( ) ) != EOF ) {
  21. /*determina cual calificacion se introdujo*/
  22. switch (cali) { /*switch anidado dentro del while */
  23.  
  24. case 'A':
  25. case 'a':
  26. ++cuentaA;
  27. break;
  28.  
  29. case 'B':
  30. case 'b':
  31. ++cuentaB;
  32. break;
  33.  
  34. case 'C':
  35. case 'c':
  36. ++cuentaC;
  37. break;
  38.  
  39. case 'D':
  40. case 'd':
  41. ++cuentaD;
  42. break;
  43.  
  44. case 'F':
  45. case 'f':
  46. ++cuentaF;
  47. break;
  48.  
  49. case '\n':
  50. case '\t':
  51. case ' ':
  52. break;
  53.  
  54. default:
  55. printf("Introdujo una letra incorrecta.");
  56. printf(" Introduzca una nueva calificacion \n");
  57.        break;
  58. }
  59.  
  60. }
  61.  
  62.  
  63. printf("\nLos totales por calificacion son: \n");
  64. printf("A: %d\n", cuentaA);
  65. printf("B: %d\n", cuentaB);
  66. printf("C: %d\n", cuentaC);
  67. printf("D: %d\n", cuentaD);
  68. printf("F: %d\n", cuentaF);
  69.  
  70. return 0;
  71.  
  72. }
  73.  
  74.  




QUISIERA SABER PORQUE NO SALEN LOS PRINTF QUE SE MUESTRAN AL FINALIZAR EL WHILE Y EL SWITCH
Necesitas añadir una pausa al código antes del return 0;
Código
  1. #include <window.h>
  2.  
  3. ...
  4. system("pause");
  5. return 0;
  6. }

Según el IDE que utilices, algunos al compilar y ejecutar te añaden la pausa automáticamente mientras usas el IDE y otros no.
Aunque te añadiesen la pausa auto, solo funciona en la ejecución del IDE. Si ejecutad directamente el .exe generado, la pausa no va. Por eso debes añadirla siempre al código.

Pd: El case ' ': yo no me fió mucho de funcione en todos los entornos, yo lo escaparía. case '\ ':
Creo que case '\b' también es válido, pero tampoco me fío mucho xD


Título: Re: TENGO PROBLEMAS CON 'SWITCH' EN UN EJERCICIO
Publicado por: BARIS514 en 5 Marzo 2020, 03:09 am
Me funcionaron todas las soluciones de verdad muchas gracias por sus respuestas   :D