Problemas con ELSE

Iniciado por Xgirl12, 30 Marzo 2013, 22:36 PM

0 Miembros y 1 Visitante están viendo este tema.

Xgirl12

Hola, que tal a todos por aquí.

Solicitando su ayuda para que este programa me corra, el problema es que me dice que no hay IF antes de los ELSE, pero sí los hay.
Espero sus comentarios y gracias de antemano por su atención.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

char nom[10];
float Compra, Desc, Total;


main() {
/*Declaración para introducir el nombre del cliente */
printf("Ingrese el nombre del cliente: \n",nom);
scanf("%9s", nom);
printf("El nombre del cliente es %s \n", nom );

/*Declaración para introducir total de la compra */
printf ("Ingrese el total de su compra: \n", Compra);
scanf ("%6.2f", &Compra);

/* Operaciones para aplicar descuento */
if(Compra >= 8000){

Total = Compra-(Compra*0.12);
printf("El total a  pagar es de: %6.2f \n", Total);
}
else
{
if(Compra == 7999 && Compra >=5500)
Total = Compra-(Compra*.10);
printf("El total a pagar es de: %5.2f \n", Total);
}
else
{
if(Compra ==5499 && Compra >=3100)
Total = Compra-(Compra*.07);
printf("El total a pagar es de:%6.2f \n", Total);
}
else
{
if(Compra == 3099 && Compra >=1500)
Total = Compra-(Compra*.05);
printf("El total a pagar es de: %6.2f \n", Total);
}
while (Compra !=1500)
{
if (Compra < 1500)
printf("Su compra no aplica descuento \n");
printf("El total a pagar es de: %5.2f \n",Compra);
}




return 0;
}

avesudra

Es que la estructura que tu pones para el else-if es esta:

else
{
  if ( . . . )
}

Y la correcta para un else-if es esta:

else if( . . . )
{

}

Y el error es obvio dado que no hay un if anterior sino un else.Quedando tu code así(el while provoca un bucle infinito pero eso ya te lo dejo a tí , te he comentado algunos printf porque dabas argumentos de más):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


/**¡No es bueno usar variables globales**/

int main()
{
    float Compra, Desc, Total;
    char nom[10];
    /*Declaración para introducir el nombre del cliente */
    printf("Ingrese el nombre del cliente: \n");//Aquí no va nom....
    scanf("%9s", nom);
    printf("El nombre del cliente es %s \n", nom );

    /*Declaración para introducir total de la compra */
    printf ("Ingrese el total de su compra: \n");//Aquí no va Compra...
    scanf ("%6f", &Compra);//Aquí da un error si le pones el .2

    /* Operaciones para aplicar descuento */
    if(Compra >= 8000)
    {
        Total = Compra-(Compra*0.12);
        printf("El total a  pagar es de: %6.2f \n", Total);
    }
    else if(Compra == 7999 && Compra >=5500)
    {
        Total = Compra-(Compra*.10);
        printf("El total a pagar es de: %5.2f \n", Total);
    }
    else if(Compra ==5499 && Compra >=3100)
    {
        Total = Compra-(Compra*.07);
        printf("El total a pagar es de:%6.2f \n", Total);
    }
    else if(Compra == 3099 && Compra >=1500)
    {
        Total = Compra-(Compra*.05);
        printf("El total a pagar es de: %6.2f \n", Total);
    }
    while (Compra !=1500)//Esto provoca un bucle infinito...
    {
        if (Compra < 1500)
            printf("Su compra no aplica descuento \n");
        printf("El total a pagar es de: %5.2f \n",Compra);
    }
    return 0;
}
Regístrate en

Xgirl12

Muchas gracias por tus comentarios - correcciones Avesudra. Me gustaría que me dijeras de que otra forma no se me haría un bucle infinito, ¿estará bien si utilizara otro if para por una cantidad X me dijera que es inválido o una tecla para salir?

avesudra

Sí claro que está bien, si la cantidad es menor que 1500 no se aplica descuento pero quería que te dieses cuenta de que ahí un bucle no pinta nada.
Regístrate en

Xgirl12

OK. Corrigiendo y en un momento más comento que tal me fue.

85

#5
faltaban cosas, el tipo int en la función MAIN y el return 0.
y las etiquetas de c++ XD. Y las globales hacelas locales preferentemente.
y el bucle
y usar else-if


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
char nom[10];
float Compra, Desc, Total;

/*Declaración para introducir el nombre del cliente */
printf("Ingrese el nombre del cliente: \n",nom);
scanf("%9s", nom);
printf("El nombre del cliente es %s \n", nom );

/*Declaración para introducir total de la compra */
printf ("Ingrese el total de su compra: \n", Compra);
scanf ("%6.2f", &Compra);

/* Operaciones para aplicar descuento */
if(Compra >= 8000){

Total = Compra-(Compra*0.12);
printf("El total a  pagar es de: %6.2f \n", Total);
}
       else if(Compra == 7999 && Compra >=5500)
       {
Total = Compra-(Compra*.10);
printf("El total a pagar es de: %5.2f \n", Total);
       }
       else if(Compra ==5499 && Compra >=3100)
       {
Total = Compra-(Compra*.07);
printf("El total a pagar es de:%6.2f \n", Total);
       }
       else if(Compra == 3099 && Compra >=1500)
       {
Total = Compra-(Compra*.05);
printf("El total a pagar es de: %6.2f \n", Total);
       }

if (Compra !=1500)
{
if (Compra < 1500)
   printf("Su compra no aplica descuento \n");

printf("El total a pagar es de: %5.2f \n",Compra);
}

return 0;
}
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

Xgirl12

Hola de nuevo.

Sólo cometándoles que modifique siguiendo sus consejos, pero no me corria como yo quería. No me daba el total a pagar y como bien me decía avesudra me generaba un bucle que no paraba.

Pero volví al código original y lo cambie como bien me dijeron con otro If en lugar del while y ya me corre.

Se los paso, pero quisiera que me dijeran de que otra forma lo puedo mejorar, ¿se podrá con un swich para no usar tantos if?

De antemano gracias, es un gusto poder interactuar con gente que no se burla por preguntas sencillas como estas, pero cuando se está aprendiendo es importante.



#include <stdio.h>
#include <conio.h>
int main()
{
char nom[10];
float Compra, Desc, Total;
/*Declaración para introducir el nombre del cliente */
printf("Ingrese el nombre del cliente: \n");
scanf("%9s", nom);
printf("El nombre del cliente es %s \n", nom );
/*Declaración para introducir total de la compra */
printf ("Ingrese el total de su compra: \n", Compra);
scanf ("%f", &Compra);
/* Operaciones para aplicar descuento */
if(Compra >= 8000){
Total = Compra-(Compra*0.12);
}
else
{
if(Compra <= 7999 && Compra >=5500){
Total = Compra-(Compra*.10);
}
else
{
if(Compra <=5499 && Compra >=3100){
Total = Compra-(Compra*.07);
}
else
{
if(Compra <= 3099 && Compra >=1500){
Total = Compra-(Compra*.05);
}
else
{
if (Compra < 1500){
printf("Su compra no aplica descuento \n");
Total = Compra;
}
}
}
}
}
printf ("El total de su compra es: %.2f\n", Total);
getch ();
return 0;
}



Si me pudieran decir como hacer para que mi código aparezca numerado.
Saludos.

Wofo

El switch no lo puedes usar en este caso porque no admite expresiones lógicas sino solo valores literales. Puedes ver más (con ejemplos y todo) sobre switch en este link: http://www.cplusplus.com/doc/tutorial/control/

Para que el código te aparezca numerado tienes que usar el GeSHi al editar el post (hay un botón que dice GeSHi, le das y seleccionas el lenguaje que estés usando).

Un consejo es que te olvides de conio.h ya que no es C estándar. Tienes algunas alternativas en este post: |Lo que no hay que hacer en C/C++. Nivel basico|

Saludos,
Wofo.

Xgirl12

Gracias por contestar Wofo, pero me están pidiendo que incluya al menos una estructura repetitiva (while, do-while o for).
Nada más que llegado a este punto no sé de que forma podría hacerle, por eso había puesto un while pero me daba un bucle...

Espero alguna sugerencia.

Saludos.

MeCraniDOS

Puedes añadir un bucle do-while para preguntar al cliente si desea repetir la operación, en caso afirmativo volver al inicio, y en caso negativo finalizar

Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman