TENGO PROBLEMAS CON 'SWITCH' EN UN EJERCICIO

Iniciado por BARIS514, 4 Marzo 2020, 04:35 AM

0 Miembros y 1 Visitante están viendo este tema.

BARIS514

AQUI EL EJERCICIO
Código (cpp) [Seleccionar]

/*Figura 4.7: fig04_07.c
cuenta las calificaciones expresadas en letras */
#include<stdio.h>

/*la funcion main comienza la ejecucion del programa*/
int main()
{
int cali;
int cuentaA = 0;
int cuentaB = 0;
int cuentaC = 0;
int cuentaD = 0;
int cuentaF = 0;

printf( "Introduzca la letra que corresponde a la calificacion \n" );
printf("Introduzca el caracter EOF para finalizar la entrada de datos. \n");

/* repite hasta que el usuario digita la secuencia de teclas de fin
de archivo*/
while ( ( cali = getchar( ) ) != EOF ) {
/*determina cual calificacion se introdujo*/
switch (cali) { /*switch anidado dentro del while */

case 'A':
case 'a':
++cuentaA;
break;

case 'B':
case 'b':
++cuentaB;
break;

case 'C':
case 'c':
++cuentaC;
break;

case 'D':
case 'd':
++cuentaD;
break;

case 'F':
case 'f':
++cuentaF;
break;

case '\n':
case '\t':
case ' ':
break;

default:
printf("Introdujo una letra incorrecta.");
printf(" Introduzca una nueva calificacion \n");
       break;
}

}


printf("\nLos totales por calificacion son: \n");
printf("A: %d\n", cuentaA);
printf("B: %d\n", cuentaB);
printf("C: %d\n", cuentaC);
printf("D: %d\n", cuentaD);
printf("F: %d\n", cuentaF);

return 0;

}






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

EdePC

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):

CitarC:\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.

@XSStringManolo

#2
Cita de: BARIS514 en  4 Marzo 2020, 04:35 AM
AQUI EL EJERCICIO
Código (cpp) [Seleccionar]

/*Figura 4.7: fig04_07.c
cuenta las calificaciones expresadas en letras */
#include<stdio.h>

/*la funcion main comienza la ejecucion del programa*/
int main()
{
int cali;
int cuentaA = 0;
int cuentaB = 0;
int cuentaC = 0;
int cuentaD = 0;
int cuentaF = 0;

printf( "Introduzca la letra que corresponde a la calificacion \n" );
printf("Introduzca el caracter EOF para finalizar la entrada de datos. \n");

/* repite hasta que el usuario digita la secuencia de teclas de fin
de archivo*/
while ( ( cali = getchar( ) ) != EOF ) {
/*determina cual calificacion se introdujo*/
switch (cali) { /*switch anidado dentro del while */

case 'A':
case 'a':
++cuentaA;
break;

case 'B':
case 'b':
++cuentaB;
break;

case 'C':
case 'c':
++cuentaC;
break;

case 'D':
case 'd':
++cuentaD;
break;

case 'F':
case 'f':
++cuentaF;
break;

case '\n':
case '\t':
case ' ':
break;

default:
printf("Introdujo una letra incorrecta.");
printf(" Introduzca una nueva calificacion \n");
       break;
}

}


printf("\nLos totales por calificacion son: \n");
printf("A: %d\n", cuentaA);
printf("B: %d\n", cuentaB);
printf("C: %d\n", cuentaC);
printf("D: %d\n", cuentaD);
printf("F: %d\n", cuentaF);

return 0;

}






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;
#include <window.h>

...
system("pause");
return 0;
}


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

BARIS514

Me funcionaron todas las soluciones de verdad muchas gracias por sus respuestas   :D