Dev - C++ - Problemas con el switch

 
Vista:
Imágen de perfil de Giovanny

Problemas con el switch

Publicado por Giovanny (1 intervención) el 06/10/2014 01:21:36
Este es un programa que estoy haciendo en el DEV-C++ version 4.9.9.2. El problema es que no me marca ningun error y me pide los primeros datos bien, el problema que tengo es que no entra a los case, osea no me hace las operaciones que estan dentro del case1,case2,case3 y case 4, si alguien es tan amable de ayudar a corregir mi error les estaria inmensamente agradecido y salvaran mi vida.Que tengan buena tarde

#include <stdio.h>
#include <stdlib.h>
main()
{
float a,d,r,p=0, t=0;
int op;

printf ("\n1.Tipo de enfermedad - Sida su costo por dia es $25\n");
printf("\n2.Tipo de enfermedad - Hepatitis B su costo por dia es $16\n");
printf("\n3.Tipo de enfermedad - Influenza su costo por dia es $20\n");
printf("\n4.Tipo de enfermedad - Cancer su costo por dia es $32\n ");
printf("\nElige el tipo de enfermedad\n");
scanf("%d",& op);
printf("\nCuantos años tiene\n");
scanf ("%f",&a);
printf("\nCuantos dias fueron\n");
scanf("%f",&d);
switch(op){
case 1:
if((a>14) and (a<22)){
printf("Deme los años del paciente");
scanf("%f",&a);
p=(d*.25);
r=(a*25);
t=(d*25);
printf("Su pago total es %d",p);
printf("Su pago total es %d",r);
printf("Su pago total es %d",t);
}
break;

case 2:
if((a>14) and (a<22)){
printf("Deme los años del paciente");
scanf("%f",&a);
p=(d*16);
r=(a*0.10);

t=(d*16);
printf("Su pago total es %d",p);
printf("Su pago total es %d",r);
printf("Su pago total es %d",t);
}
break;

case 3:
if((a>14) and (a<22)){
printf("Deme los años del paciente");
scanf("%f",&a);
p=(d*20);
r=(a*0.10);
t=(d*20);
printf("Su pago total es %d",p);
printf("Su pago total es %d",r);
printf("Su pago total es %d",t);
}
break;

case 4:
if((a>14) and (a<22)){
printf("Deme los años del paciente");
scanf("%f",&a);
p=(d*30);
r=(a*0.10);
t=(d*30);
printf("Su pago total es %f",p);
printf("Su pago total es %f",r);
printf("Su pago total es %f",t);
}
break;

default:
printf("Opcion no valida");
system("pause");

}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas con el switch

Publicado por near902 (4 intervenciones) el 06/10/2014 05:47:24
mira en esta linea scanf("%d",& op); es mejor que lo modifiques asi scanf("%d",&op); y en los case encerrar todo entre corchetes
case(1): { if(valor logico) {...} else {...} break;} hoy tuve un problema parecido y se arreglo asi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con el switch

Publicado por vangodp (287 intervenciones) el 06/10/2014 06:19:10
substituya los "and" por &&. Es lo único que me ha marcado error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con el switch

Publicado por Martín (158 intervenciones) el 07/10/2014 16:12:03
La lógica del programa es un tanto particular, pero no voy a cuestionar eso.
Pongo algunos comentarios donde encuentro errores de código o sugerencia con
1
/*** comentario ***/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
#include <stdlib.h>
#include <Iso646.h>  /*** define la macro "and" como "&&" ***/
 
int main(void)  /*** main() devuelve int -- estándar C11 (ISO/IEC 9899:2011) ***/
{
	float a,d,r,p=0, t=0;
	int op;
 
	printf ("\n1.Tipo de enfermedad - Sida su costo por dia es $25\n");
	printf("\n2.Tipo de enfermedad - Hepatitis B su costo por dia es $16\n");
	printf("\n3.Tipo de enfermedad - Influenza su costo por dia es $20\n");
	printf("\n4.Tipo de enfermedad - Cancer su costo por dia es $32\n ");
	printf("\nElige el tipo de enfermedad\n");
	scanf("%d",& op);
	printf("\nCuantos años tiene\n");
	scanf ("%f",&a);
	printf("\nCuantos dias fueron\n");
	scanf("%f",&d);
	switch(op) {
		case 1:
		if((a>14) and (a<22)) {
			printf("Deme los años del paciente");
			scanf("%f",&a);
			p=(d*.25);
			r=(a*25);
			t=(d*25);
			printf("Su pago total es %f",p); /*** p debe leerse como float ***/
			printf("Su pago total es %f",r); /*** r debe leerse como float ***/
			printf("Su pago total es %f",t); /*** t debe leerse como float ***/
		}
		break;
 
		case 2:
		if((a>14) and (a<22)) {
			printf("Deme los años del paciente");
			scanf("%f",&a);
			p=(d*16);
			r=(a*0.10);
 
			t=(d*16);
			printf("Su pago total es %f",p);  /*** p debe escribirse como float ***/
			printf("Su pago total es %f",r);  /*** r debe escribirse como float ***/
			printf("Su pago total es %f",t);  /*** t debe escribirse como float ***/
		}
		break;
 
		case 3:
		if((a>14) and (a<22)) {
			printf("Deme los años del paciente");
			scanf("%f",&a);
			p=(d*20);
			r=(a*0.10);
			t=(d*20);
			printf("Su pago total es %f",p);  /*** p debe escribirse como float ***/
			printf("Su pago total es %f",r);  /*** r debe escribirse como float ***/
			printf("Su pago total es %f",t);  /*** t debe escribirse como float ***/
		}
		break;
 
		case 4:
		if((a>14) and (a<22)) {
			printf("Deme los años del paciente");
			scanf("%f",&a);
			p=(d*30);
			r=(a*0.10);
			t=(d*30);
			printf("Su pago total es %f",p);  /*** p debe escribirse como float ***/
			printf("Su pago total es %f",r);  /*** r debe escribirse como float ***/
			printf("Su pago total es %f",t);  /*** t debe escribirse como float ***/
		}
		break;
 
		default:
		printf("Opcion no valida");
		system("pause");
 
	}
 
	system("pause");  /*** yo no usaría esto en un programa de la vida real
	                       pero puede servirte ahora                         ***/
	return 0;   /*** main() devuelve 0 cuando termina bien ***/
}

Martín
Clases particulares de C++ por mail y Skype
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con el switch

Publicado por vangodp (287 intervenciones) el 07/10/2014 22:13:02
¿lo has compilado?
Te ha compilado eso: if((a>14) and (a<22))
como eso: if((a>14) && (a<22))

A mi no me compila :S

La cosa es que lo resalta y to la sintax pero me marca error esos "and" :S
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con el switch

Publicado por Martín (158 intervenciones) el 07/10/2014 22:58:10
Sí, la línea
1
if((a>14) and (a<22))
es correcta en C siempre que se haya definido la macro que hace que "and" se interprete como "&&"; por eso es que puse
1
#include <Iso646.h>
(Para C++ no es necesario; si tienes la curiosidad, puedes ver el contenido del archivo ciso646, que está ahí por razones de compatibilidad).

Martín
Clases particulares de C++ por mail y Skype
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar