Foros del Web » Programación para mayores de 30 ;) » C/C++ »

switch-case

Estas en el tema de switch-case en el foro de C/C++ en Foros del Web. Hola amigos del foro recien comienzo con este tema de switch-case, hice un programa para que el usuario pueda elegir entre calcular el area o ...
  #1 (permalink)  
Antiguo 12/10/2012, 09:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 17
Antigüedad: 11 años, 9 meses
Puntos: 0
switch-case

Hola amigos del foro recien comienzo con este tema de switch-case, hice un programa para que el usuario pueda elegir entre calcular el area o el perimetro de un triangulo, el problema es que no me lo esta tomando al switch pero si al default, en fin les dejo el programa a ver si alguien me puede ayudar, desde ya muchas gracias

Código:
#include <stdio.h>
#include <stdlib.h> 
#include <conio.h>

//Programa para calcular el area de un triangulo o su perimetro

char a;
float b,c,d,e,f,p;
float areatri;


main(){

printf("\n ingrese la base del triangulo");
scanf ("%f", &b);
printf ("\n ingrese la altura del triangulo");
scanf ("%f", &c);

printf("\n ingrese el valor de los lados");
     scanf ("%f%f%f",&d,&e,&f);
     
     
     printf("\n opcion1: area del triangulo");
     printf("\n opcion2: perimetro del triangulo");
     printf("\n opcion3: salir");
     




switch(a)

{
case 1:


if (b>0 && c>0)
{
areatri=(b*c)/2; 
printf ("\n el area del triangulo es %f \n \n", areatri);
}
else
{
    printf("\n error: ingrese valores mayores que cero \n \n");
}
break;


case 2:

     if (d<=0 || e<=0 || f<=0)
     {
             printf("\n error: ingrese valores mayores que cero \n \n");
             }
             else if (d+e > f && d+f > e && e+f > d)
             {
                  p= d+e+f;
                  printf ("\n el perimetro del triangulo es %f \n \n", p);
                  }
                 else
                  {
                      printf ("\n error: La suma de dos lados debe ser mayor que el lado restante \n \n");
                    
                      }
break;

case 3:
     
     system("pause");
     break;

default:
        
        printf("\n opcion incorrecta");
        getch();
        

}


system("pause");

}
  #2 (permalink)  
Antiguo 12/10/2012, 11:04
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: switch-case

Y donde guardas en 'a' la opcion seleccionada por el usuario? Siempre salta a default porque no le has asignado ningun valor y por defecto se inicia con un valor basura (puede que accidentalmente un dia se inicie a uno de los valores esperados, pero no es así como debe funcionar). Tienes que usar otro scanf o un getchar para definir el valor de 'a' despues de mostrar las opciones.

Otra cosa, si la base del triangulo es 'b', para que pides luego 3 lados si ya sabes que uno es la base?

Aun otra cosa, usa corchetes en todos los cases e indenta un poco mejor el codigo, te ayudará a ti y será mas comprensible por si otra gente que pueda mirar tu codigo.

Y una mas, para que el conio.h? No es estandar de C ni todas sus versiones funcionan como se espera, y el resultado de algunas de sus funciones depende del s.o. o incluso de la version.

Y una mas, el main es un entero, debes declararlo como tal y salir de este retornando un codigo de error (0 para success y !=0 para error)

Saludos
vosk
  #3 (permalink)  
Antiguo 12/10/2012, 11:15
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: switch-case

Ah y otra: no uses system('pause'), solo funciona en sistemas que aceptan la funcion pause y ademas crea un nuevo proceso que simula una funcion que espera la tecla return del usuario (demasiado peso para un simple programa), y ademas ejecuta 'pause' (si se da la casualidad que tienes un virus llamado 'pause' en tu directorio de trabajo no dudes que ese dia saltará de contento)

Mejor usa getchar(): no tendras problemas y es mas corto de escribir

Saludos
vosk
  #4 (permalink)  
Antiguo 12/10/2012, 12:01
 
Fecha de Ingreso: agosto-2012
Mensajes: 17
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: switch-case

GRACIAS!!! vosk te lo agradesco, ahora si funciona a la perfeccion, pero en vez de un getchar use un scanf, una vez mas te lo agradesco

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:38.