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;
}
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;
}
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?
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.
OK. Corrigiendo y en un momento más comento que tal me fue.
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
#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;
}
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.
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| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)
Saludos,
Wofo.
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.
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
Si un bucle que permita realizar más compras.
El array 'nom' era muy peque, sólo 10 podés usar uno más grande XD
int main()
{
char nom[128];
float Compra, Desc, Total;
int a, opc;
for(a=0;; a++)
{
if(a>0){
printf("\n\tDesea Realizar una nueva compra?\n");
fflush(stdin);
scanf("%d",&opc);
if(opc==0) break;
}
// Declaración para introducir el nombre del cliente
printf("Ingrese el nombre del cliente: \n",nom);
fflush(stdin);
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);
fflush(stdin);
scanf ("%f", &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;
}
cuando pongas las etiquetas de código, tenés que poner code=cpp
hasta luego
Excelente por las sugerencias y gracias por el ejemplo 85, muy amable de tu parte y ahora si, mil gracias a todos por su ayuda.
¡Saludos!
Hola de nuevo a todos.
Retomando este programa, ahora me piden que le añada arreglos (arrays), pero la verdad no sé como es que encajarían aquí, les pido sugerencias de cómo lo podría agregar, es decir, que parte del programa puedo modificar para este asunto.
Espero que me hayan entendido y gracias de antemano.
Saludos.
Cita de: Xgirl12 en 11 Abril 2013, 06:50 AMRetomando este programa, ahora me piden que le añada arreglos (arrays), pero la verdad no sé como es que encajarían aquí, les pido sugerencias de cómo lo podría agregar, es decir, que parte del programa puedo modificar para este asunto.
Primero declaras las variables "Compra", "Desc" y "Total" como arrays:
#include <stdio.h>
#include <stdlib.h>
#define NUM_COMPRAS 10
int main(void)
{
char nom[10];
float Compra[NUM_COMPRAS];
float Desc[NUM_COMPRAS];
float Total[NUM_COMPRAS];
A continuación creas un bucle donde realizas las operaciones por cada una de las compras:
int i;
for (i = 0; i < NUM_COMPRAS; i++){
/*
** Procesamos la compra utilizando
**
** Compra[i]
** Desc[i]
** Total[i]
*/
}
Como indica el comentario debes tratar a las tres variables como arrays indicando su nombre así como el indice del elemento a procesar.
No tiene uso practico, supongo te piden eso para practicar con arrays.
Por ultimo evita el uso de la biblioteca conio de Borland, el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
Un saludo
Gracias por la idea rir3760, yo también pensé que los arreglos no le quedan bien a este programa en particular, pero pues lo tengo que hacer.
Estoy adaptándolo para subirlo y que me compartan sus opiniones.
Hola a todos.
Siguiendo con lo mismo y espero en verdad no aburrirlos, pero es que se me complica porque aunque me lo piden a si, no le encuentro la lógica para poder dejarlo bien.
El compañero rir3760 me aconsejo usar un bucle, pero ¿de qué forma lo utilizo para poder aplicar el descuento que le toque?
Tengo otros detalles que vienen en el código, pero me interesa saber si estoy demasiado pérdida o todavía hay alguna solución.
Les paso el código actual:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
float Total, Compra;
struct Cliente {
char nombre[10];
char apellido[15];
}Nom;
/* En esta estructura quise poner Cat1 = 0.12 es decir, el porcentaje que le
corresponde, pero me marca error... solamente quitando la igualdad sigue*/
struct Categoria{
float Cat1, Cat2, Cat3, Cat4;
};
/*Menu principal */
printf("Categoría 1 corresponde de 8000 o mas\n");
printf("Categoría 2 corresponde de 7999 a 5500\n");
printf("Categoría 3 corresponde de 5499 a 3100\n");
printf("Categoria 4 corresponde de 3099 a 1500\n");
float Descuento[5]={12,10,7,5};/* Aqui lo que quiero hacer es que me de una tabla donde
se ven los descuentos que se otorgan por categoria */
// Declaración para introducir el nombre del cliente
printf("Ingrese el nombre del cliente: \n",Nom);
fflush(stdin);
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);
fflush(stdin);
scanf ("%f", &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*0.10);
printf("El total a pagar es de: %5.2f \n", Total);
}
else if(Compra ==5499 && Compra >=3100)
{
Total = Compra-(Compra*0.07);
printf("El total a pagar es de:%6.2f \n", Total);
}
else if(Compra == 3099 && Compra >=1500)
{
Total = Compra-(Compra*0.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);
}
system("pause");
return 0;
}
Saludos.