Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2012, 16:46
kiba71
 
Fecha de Ingreso: agosto-2010
Mensajes: 14
Antigüedad: 14 años, 2 meses
Puntos: 0
Error extraño: programa se salta un scanf

Buenas a todos.

Bueno, en mis ratillos de aburrimiento me pongo a programar cosas tontas xD y bueno... Aquí os dejo el código del programa; después pongo el problema:

Código:
#include <string.h>
#include <stdio.h>
#include <math.h>

int main () {

    char seguir = 's';
    char confirmar;
    float a, b, c, d;
    char numero;

    while (seguir=='s') {

        printf("Bienvenido a Nexus Logic Calc versión 0.1. De momento solo calcula reglas de tres con números enteros. \n\n");

        printf("La lógica será la siguiente: \n       a ---------- b \n       c ---------- d \nO lo que es lo mismo: A es a B como C es a D\n");

        printf("¿Qué número desconoce?\n\nNúmero (letra minúscula): ");
        scanf("%c", &numero);
        fflush(stdin);

        switch (numero) {

            case    'a':
            /*Principio de caso A*/
            printf("Introduzca b: ");
            scanf("%f", &b);
            fflush(stdin);

            printf("Introduzca c: ");
            scanf("%f", &c);
            fflush(stdin);

            printf("Introduzca d: ");
            scanf("%f", &d);
            fflush(stdin);

            a = b * c / d;

            printf("El resultado de a es: %f \n", a);
            break;
            /*Fin del caso A*/

            case    'b':
            /*Principio de caso B*/
            printf("Introduzca a: ");
            scanf("%f", &a);
            fflush(stdin);

            printf("Introduzca c: ");
            scanf("%f", &c);
            fflush(stdin);

            printf("Introduzca d: ");
            scanf("%f", &d);
            fflush(stdin);

            b = a * d / c;

            printf("El resultado de b es: %f \n", b);
            break;
            /*Fin del caso B*/

            case    'c':
            /*Principio de caso C*/
            printf("Introduzca a: ");
            scanf("%f", &a);
            fflush(stdin);

            printf("Introduzca b: ");
            scanf("%f", &b);
            fflush(stdin);

            printf("Introduzca d: ");
            scanf("%f", &d);
            fflush(stdin);

            c = a * d / b;

            printf("El resultado de c es: %f \n", c);
            break;
            /*Fin del caso C*/

            case    'd':
            /*Principio de caso D*/
            printf("Introduzca a: ");
            scanf("%f", &a);
            fflush(stdin);

            printf("Introduzca b: ");
            scanf("%f", &b);
            fflush(stdin);

            printf("Introduzca c: ");
            scanf("%f", &c);
            fflush(stdin);

            d = b * c / a;

            printf("El resultado de d es: %f \n", d);
            break;
            /*Fin del caso D*/
        }

        fflush(stdin);
        printf("¿Desea calcular otra regla de tres? (s/n): ");
        scanf("%c", &confirmar);

        if (confirmar == 's') {

            seguir = 's';

        }

        if (seguir=='s') {

            printf("\n\n ==================== \n\n");

        }
        else {

            printf("Hasta luego \n");

        }
        
    }

    return 0;

}
El problema es que el scanf que hay después de "printf("¿Desea calcular otra regla de tres? (s/n): ");" que debería de preguntar para cambiar el contenido de la variable char confirmar, no aparece. Es decir, en la ejecución del programa no pide el dato, se salta el scanf, y como "seguir" sigue siendo 's', es un bucle infinito.

A ver si veis algo raro en el programa o algo :S

Muchas gracias por adelantado ^^

Saludos.