Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: edr89 en 19 Mayo 2013, 08:58 am



Título: [C] for loop y switch cases
Publicado por: edr89 en 19 Mayo 2013, 08:58 am
El código compila y ejecuta pero por alguna razon me toma 1 y 2 como no validos
Código:
#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.


Título: Re: [C] for loop y switch cases
Publicado por: 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.

Mejor lo ves en el código corregido:


Código
  1. #include<stdio.h>
  2. int main()
  3. {
  4.    int cal, total_cal=0, food, foodfor;
  5.    char respuesta;
  6.    printf("\t\tPrograma de calorias\n\n");
  7.    printf("1. Cuanto has comido hoy? \n");
  8.    printf("2. Indice de Masa Corporal \n");
  9.    printf("3. Salir: \n");
  10.    do{
  11.            scanf(" %c", &respuesta);
  12.    switch (respuesta)
  13.            {
  14.                case '1':
  15.                    {
  16.                        printf("Ingresa los datos de los alimentos.\n\n ");
  17.                        printf("Cuantos alimentos comiste?: ");
  18.                        scanf("%d",&food);
  19.                        printf("Teclea las calorias de cada alimento: ");
  20.                        for(foodfor = 0;foodfor<food;foodfor++)
  21.                            {
  22.                                scanf("%d",&cal);
  23.                                total_cal +=cal;
  24.                            }
  25.                        printf("Has comido %d calorias.",total_cal);
  26.                        break;
  27.                    }
  28.                case '2':
  29.                    {
  30.                        printf("Indice de Masa Corporal\n");
  31.                        printf("Please Wait...\n");
  32.                        break;
  33.                    }
  34.                case '3':
  35.                    {
  36.                        printf("Adios!");
  37.                        return 1;
  38.                    }
  39.                default:
  40.                    printf("Opcion no valida, intenta de nuevo\n");
  41.            }
  42.    }while(respuesta<'1'|| respuesta>'3');
  43.    return 0;
  44. }
  45.  

Saluditos!. ..... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: [C] for loop y switch cases
Publicado por: edr89 en 19 Mayo 2013, 22:33 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:

Código:
do
{
  Sentencias
}
while(condicion);

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

Código:
total_cal +=cal

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

Código:
total_cal -=cal
Va a restarle el valor de cal a total_cal?

Gracias y saludos!


Título: Re: [C] for loop y switch cases
Publicado por: leosansan en 19 Mayo 2013, 22:55 pm

Código:
total_cal +=cal

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

Código:
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.
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)