SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: manudo en Jueves 16 de Agosto de 2012, 01:36

Título: Misplaced else
Publicado por: manudo en Jueves 16 de Agosto de 2012, 01:36
Buenas, soy nuevo en C++ y estoy viendo el if-else.
Traté de hacer un código "improvisado" de un algoritmo que aprendí de una clase de matemáticas en el colegio pero me da este error:

"Error D-CALC.CPP 20: Misplaced else in function main()

Y el código...

Código: [Seleccionar]
#include <stdio.h>

main()
{
int a, b, c, result, bwpow, desition;
printf("Welcome to the iDeveloper's (manudo) discriminant calculator! ");
getchar();
printf("Do you know the a, b, and c of the ecuation? [Y=1/N=0] ");
scanf("%d", &desition);
if (desition == 1)
printf("Then enter the a ");
scanf("%d", &a);
printf("Enter the b ");
scanf("%d", &b);
printf("Enter the c ");
scanf("%d", &c);
bwpow = b * b;
result = bwpow - 4*a*c;
printf("The discriminant of the ecuation is: %d", result);
      else printf("Nothing to calculate, press enter and Alt+F4 to leave ");
return 0;
}

Necesita sus mejoras pero bueno, no tengo mucha experiencia en esto. Y uso Borland Turbo C++ 4.5.

:ayuda: y :gracias:
Título: Re:Misplaced else
Publicado por: ProfesorX en Viernes 17 de Agosto de 2012, 01:02
El error esta en que la sentencia if contiene varias sentencias de codigo, y en C/C++ una sentencia termina con ; por lo tanto eso significa que tu if termina mucho antes que el else, y por eso no lo reconoce.

O sea segun tu codigo el if termina aca:

Código: [Seleccionar]
    if (desition == 1)
        printf("Then enter the a "); // Aca termina el if


Cuando en realidad necesitas que termine aca:

Código: [Seleccionar]
    printf("The discriminant of the ecuation is: %d", result);
    // Aca es donde en realidad deberia terminar el if
    else printf("Nothing to calculate, press enter and Alt+F4 to leave ");

En estos casos, lo que se debe utilizar son llaves {} para indicar que tu if contiene mas de una sentencia

A continuacion de dejo el codigo corregido:

Código: [Seleccionar]
int main()
{
    int a, b, c, result, bwpow, desition;
    printf("Welcome to the iDeveloper's (manudo) discriminant calculator! ");
    getchar();
    printf("Do you know the a, b, and c of the ecuation? [Y=1/N=0] ");
    scanf("%d", &desition);
    if (desition == 1)
    { // Se utilizan llaves {} para indicar un bloque de sentencias dentro de un if
        printf("Then enter the a ");
        scanf("%d", &a);
        printf("Enter the b ");
        scanf("%d", &b);
        printf("Enter the c ");
        scanf("%d", &c);
        bwpow = b * b;
        result = bwpow - 4*a*c;
        printf("The discriminant of the ecuation is: %d", result);
    } // Cerramos la llave para indicar que es el fin del bloque
    else printf("Nothing to calculate, press enter and Alt+F4 to leave ");
    return 0;
}

Saludos :)
Título: Re:Misplaced else
Publicado por: manudo en Sábado 18 de Agosto de 2012, 02:04
Excelente, me sirvió y ya aprendí algo nuevo. :gracias:
Título: Re:Misplaced else
Publicado por: ernestoac en Martes 25 de Septiembre de 2012, 22:48
Mira:
Cuando uno pone un if con varias lineas de codigo necesitas poner llaves para despues el else, que este le debes hacer lo mismo. Ejemplo:
if (a < 25){
//todas las lineas que desees (con llaves siempre y cuando sea mas de una linea)
}else{
//estas llaves debes ponerla si son más de una linea de codigo en el else
}