[C] for loop y switch cases

Iniciado por edr89, 19 Mayo 2013, 08:58 AM

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

edr89

El código compila y ejecuta pero por alguna razon me toma 1 y 2 como no validos

#include<stdio.h>
int main()
{
    int respuesta, cal, total_cal, food, foodfor,loopcal=0;
    printf("\t\tPrograma de calorias\n\n");
printf("1. Cuanto has comido hoy? \n");
printf("2. Indice de Masa Corporal \n");
printf("   Elige una opcion: ");
scanf("%c", &respuesta);
    switch (respuesta)
{
case 1:
{
                    printf("Ingresa los datos de los alimentos.\n\n ");
printf("Cuantos alimentos comiste?: ");
scanf("%d",&food);
printf("Teclea las calorias de cada alimento: ");
for(foodfor = 0;foodfor<=food;foodfor++)
                    {
                        scanf("%d",&cal);
                        loopcal = (loopcal + cal);
                        total_cal = loopcal;
                    }
printf("Has comido %d calorias.",total_cal);
break;
}
case 2:
{
printf("Indice de Masa Corporal\n");
printf("Please Wait...\n");
break;
}
            case 3:
                {
                    printf("Adios!");
                }
default:
                {
while(respuesta!=1&&respuesta!=2&&respuesta!=3)
                        {
                            printf("Opcion no valida, intenta de nuevo\n");
                            scanf("%d",&respuesta);
                        }
                }
}
    return 0;
}


El primer caso te debe preguntar cuantos alimentos comiste y despues te pide ingresar las calorias de cada alimentos, si comí 10 tecleo 10 etc, al final te dice todo lo que consumiste. Empezó a fallar desde que agregue for() en el caso 1, lo releo y no encuentro la falla.

ayuda por favor.

leosansan

#1
El error principal es que tenías declarada la variable" respuesta" como int, mientras que cuando luego la escaneas y usas en los case lo haces como char.

El otro es que no tienes bien usada total_cal.

Mejor lo ves en el código corregido:


Código (cpp) [Seleccionar]
#include<stdio.h>
int main()
{
   int cal, total_cal=0, food, foodfor;
   char respuesta;
   printf("\t\tPrograma de calorias\n\n");
    printf("1. Cuanto has comido hoy? \n");
    printf("2. Indice de Masa Corporal \n");
    printf("3. Salir: \n");
    do{
           scanf(" %c", &respuesta);
   switch (respuesta)
           {
               case '1':
                   {
                       printf("Ingresa los datos de los alimentos.\n\n ");
                       printf("Cuantos alimentos comiste?: ");
                       scanf("%d",&food);
                       printf("Teclea las calorias de cada alimento: ");
                       for(foodfor = 0;foodfor<food;foodfor++)
                           {
                               scanf("%d",&cal);
                               total_cal +=cal;
                           }
                       printf("Has comido %d calorias.",total_cal);
                       break;
                   }
               case '2':
                   {
                       printf("Indice de Masa Corporal\n");
                       printf("Please Wait...\n");
                       break;
                   }
               case '3':
                   {
                       printf("Adios!");
                       return 1;
                   }
               default:
                   printf("Opcion no valida, intenta de nuevo\n");
           }
   }while(respuesta<'1'|| respuesta>'3');
   return 0;
}


Saluditos!. ..... ..

edr89

Cita de: leosansan en 19 Mayo 2013, 12:07 PM
El error principal es que tenías declarada la variable" respuesta" como int, mientras que cuando luego la escaneas y usas en los case lo haces como char.

El otro es que no tienes bien usada total_cal.


Cierto, Int respuesta, y cuando lee scanf estacon %c ¬¬'

aun no llego a la parte de do-while pero veo que la estructura es:


do
{
  Sentencias
}
while(condicion);


en este caso while sí lleva fin de instruccion ;  :o


total_cal +=cal


Quiere decir que a la variable total_cal se le va a sumar la variable caloria?,


total_cal -=cal

Va a restarle el valor de cal a total_cal?

Gracias y saludos!

leosansan

Cita de: edr89 en 19 Mayo 2013, 22:33 PM


total_cal +=cal


Quiere decir que a la variable total_cal se le va a sumar la variable caloria?


total_cal -=cal

Va a restarle el valor de cal a total_cal?


Así es y lo mismo con * y /, es una forma como más "seria" o profesional de + -  * / etc  una cantidad a una variable, que siempre debe estar preinicilizada a cero, en general vamos.

Saluditos y me alegra haberte sido útil.