C/Visual C - Función printf() no se muestra después de un else en C

 
Vista:
Imágen de perfil de Anderson
Val: 8
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Función printf() no se muestra después de un else en C

Publicado por Anderson (4 intervenciones) el 24/02/2020 04:32:31
Buenas, soy nuevo y apenas aprendo la programación en C. Estoy tratando de hacer una calculadora de una lista de productos de multiplicación (el código apenas está en construcción) y estoy testeando en dado caso se vayan a multiplicar solo dos 2 factores. El problema está en que en la segunda iteración del while más interno no muestra la salida del printf, justo cuando debería de mostrar Valor 2 = no lo hace sino que salta directamente a la función scanf a pedir el segundo valor.

Acá está el código completo (está en construcción, no está terminado):

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
#include <stdio.h>
#include <stdlib.h>
 
#define CIERTO 1
#define FALSO 2
 
main(){
    int numero_conjuntos, numero_factores, cont_factores, cont, eleccion, calcular = CIERTO;
    float num_1, num_2, multiplicacion_1, multiplicacion_2;
 
    printf("Calculadora de productos en una lista\n\n");
 
    while (calcular = CIERTO){
    printf("\n1.- Empezar 2.- Fin\n");
 
    scanf("%d", &eleccion);
 
    switch (eleccion){
 
        case 1:
 
            while(calcular){
            printf("\nCuantos conjuntos de datos? = ");
            scanf("%d", &numero_conjuntos);
            for (cont = 1; cont <= numero_conjuntos; ++cont){
                printf("\nCantidad de factores del conjunto %d = ", cont);
                scanf("%d", &numero_factores);
                cont_factores = 1;
                while (cont_factores <= numero_factores){
                    if ((numero_factores >= 0) || (numero_factores <= 2)){
                        if (cont_factores == 1){
                            printf("\nValor %d = ", cont_factores);
                            scanf("%f", &num_1);
                            multiplicacion_1 = num_1 * 1;
                        }
                        else
                            printf("\nValor %d = ", cont_factores);
                        scanf("%f", &num_2);
                        multiplicacion_2 = num_2 * multiplicacion_1;
                        printf("Resultado = %f\n", multiplicacion_2);
                    }
                    else
                        break;
                    }
                }
            }
        }
    }
}

Uso el CodeBlocks, alguien me puede decir por qué pasa eso?
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

Función printf() no se muestra después de un else en C

Publicado por Nacho (76 intervenciones) el 24/02/2020 18:34:02
Vaya lío de programa.

Además de hacer código lo más simple posible es imprescindible saber depurar un programa. Así verías en seguida que para que imprima "Valor 2=" cont_factores tendría que ser distinto de 1, y no va a serlo nunca si no incrementas su valor. Y nada más empezar pones while (calcular = CIERTO) y eso es una asignación que va a ser siempre cierta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anderson
Val: 8
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Función printf() no se muestra después de un else en C

Publicado por Anderson (4 intervenciones) el 24/02/2020 22:03:35
Wow! tienes razón, ya me funcionó. Era porque no incrementaba para que hiciera la otra pasada.

Lo que hice fue colocarle un operador de incremento al cont_factores y un continue; al if más interno.

Quedó así funcionando bien:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ((numero_factores >= 0) || (numero_factores <= 2)){
    if (cont_factores == 1){
        printf("\nValor %d = ", cont_factores);
        scanf("%f", &num_1);
        multiplicacion_1 = num_1 * 1;
        ++cont_factores;
        continue;
    }
    else
    printf("Valor %d = ", cont_factores);
    scanf("%f", &num_2);
    multiplicacion_2 = num_2 * multiplicacion_1;
    printf("\nResultado = %f\n", multiplicacion_2);
    break;
}

Lo de calcular = CIERTO es algo que voy a utilizar más adelante con otro case del switch.

Muchas gracias por la ayuda.
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

Función printf() no se muestra después de un else en C

Publicado por Nacho (76 intervenciones) el 24/02/2020 22:21:55
Hace lo que quieres pero sólo porque introduces por el teclado unos determinados valores.

|| es un or. La comprobación que haces es si numero_factores es mayor o igual que 0 o numero_factores es menor o igual que 2 y lo que quieres no es eso, quieres que numero_factores sea mayor o igual que 0 y a demás menor o igual que 2. Eso es un and, &&.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar