C/Visual C - Asignación de valores enteros en C a partir de un menú de opción múltiple usando la estructura do-wh

 
Vista:

Asignación de valores enteros en C a partir de un menú de opción múltiple usando la estructura do-wh

Publicado por Andrés (1 intervención) el 12/08/2020 21:15:23
Buen día a todos. Estoy intentando hacer un pequeño programa que, con base en diversos factores, señale el riesgo de los usuarios en caso de contagiarse una enfermedad. Los factores estarán predefinidos por mi y el usuario únicamente deberá señalar el aplicable a este; por ejemplo, su sexo.

Cada opción asigna un puntaje diferente que se va acumulando en un contador (en este caso, la variable "puntos"). Finalmente, de acuerdo con el valor final de "puntos" se imprime en pantalla el nivel de riesgo estimado.

Mi idea, a efecto de evitar que ingresen factores no contemplados, es otorgarles un menú de opciones para que unicamente señalen la que les sea aplicable, para lo cual, de acuerdo con lo investigado, puedo usar la estructura do-while-switch.

No obstante lo anterior, estoy teniendo problemas con el programa, pues no realiza ninguna acción, solo imprime en diversas ocasiones el mismo menú de opciones:

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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char sexo;
    int puntos;
 
printf("Selecciona el número que corresponda a tu sexo: ");
 
    do
    {
        printf( "\n   1. Masculino.");
        printf( "\n   2. Femenino.");
        printf( "\n   3. Salir." );
 
        /* Filtramos la opción elegida por el usuario */
        do
        {
            printf( "\n   Introduzca opci%cn (1-3): ");
            scanf( "%d", &sexo);
 
        } while ( sexo < 1 || sexo > 3 );
        /* La opción sólo puede ser 1, 2, o 3 */
 
        switch (sexo)
        {
            case 1: puntos = 50;
                    printf(puntos);
                    break;
 
            case 2: puntos = 30;
                    printf(puntos);
                    break;
         }
 
    } while ( sexo != 3 );
 
    return 0;
}

Agradezco a todos de antemano.
Saludos.
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
Imágen de perfil de Kabuto
Val: 21
Ha disminuido su posición en 3 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Asignación de valores enteros en C a partir de un menú de opción múltiple usando la estructura do-wh

Publicado por Kabuto (5 intervenciones) el 13/08/2020 01:25:41
Has declarado la variable sexo como tipo char, pero las comparaciones las haces con valores int

Aquí, 1 y 3 son valores int, pero sexo es un char.
1
} while ( sexo < 1 || sexo > 3 );

El compilador lo permite, porque en realidad un char es un tipo numérico byte y técnicamente se puede comparar con un numérico de tipo int, pero el resultado de las comparaciones no va a ser el supuestamente esperado.
Esto también hace que el switch no se comporte como es de esperar.

Si quisieras compara con valores char, has de ponerlos entre comillas simples

Aquí, 1 y 3 sí que son char
1
} while ( sexo < '1' || sexo > '3' );

Sin embargo, si vamos a hacer comparaciones de mayor que, menor que... mejor no usar char.

Cambia la declaración de sexo a tipo int, la cosa debería funcionar mejor
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