Pregunta:
¿Problema con código en C?
Antonio
2013-03-28 15:26:44 UTC
Hola, apenas estoy empezando a programar en C.

Tengo el siguiente problema:
En un supermercado, se realizan descuentos por las compras a partir de unas bolitas de colores. Si el cliente saca una bolita color azul, tiene un descuento del 20%, si la bolita es roja, se aplica un descuento del 30% y si saca una bolita color blanca, no se aplica ningún descuento. Diseñe un programa que a partir del importe de la compra y el color de la bolita, muestre lo que debe pagar dicho cliente.

Pues bien tengo así el código en C:
#include
#include
main()
{
float compra,total,descuento;
char bola[6];
printf("Ingrese el importe de su compra: ");
scanf("%f",&compra);
printf("Ingrese el color de la bola que le salio: ");
scanf("%s",&bola);
if (bola=="azul"){
descuento=compra*.20;
total=compra-descuento;
printf("Total a pagar, incluendo descuento es: %f",total);
}
else
if (bola=="roja"){
descuento=compra*.30;
total=compra-descuento;
printf("Total a pagar, incluendo descuento es: %f",total);
}
else
if (bola=="blanca"){
descuento=compra*.0;
total=compra-descuento;
printf("Total a pagar, incluendo descuento es: %f",total);
}
}
Cinco respuestas:
2013-03-28 16:47:19 UTC
Buenas.

Bueno, primero que todo una pregunta( se que es malo responder con preguntas) Para que importas la librería string si no la utilizas?.

El problema esta en lo siguiente y es que tratas a una cadena (vector de caracteres) como si fuese un tipo de dato primitivo.

Te pongo un ejemplo cuando tienes un vector de enteros que contenga los siguientes números:

1 2 3 4 5

tu dices if(12345==vector)

no lo haces cierto, lo que haces es diferenciar posición para verificar si esto es cierto.



No recuerdo si scanf sirve para leer cadenas, sinceramente no lo recuerdo pero creo que si, sin embargo para el tratado de cadenas C/C++ los lenguajes nos proporcionan la librería string(aunque sea de C) por eso es que te hice la pregunta al principio.



Bueno para tu caso necesitaríamos las funciones las funciones strcmp y gets, aquí una breve explicación de lo que hacen.

strcmp(cadena1,cadena2): compara dos cadenas retornando 0 si son iguales, 1 si cadena1 mayor que cadena2(con respecto a código ASCII) y -1 en caso contrario a la anterior mencionada.

Ejemplo strcpm("sol", "sol"); retornaría 0 debido a que sol es igual a sol.

Basta con solo escribir el nombre del vector, debido a que un vector es un puntero que apunta a la primera posición de unos elementos guardados secuencial-mente (no se si sepas que es un puntero)



gets(cadena): esta su nombre lo dice get(obtener en ingles) y la s seria string (cadena). Nos sirve para la lectura de cadenas, y para poder saber donde finaliza nuestra cadena a la ultima posición se le asigna el valor de '\0' (carácter nulo) . Tienes que tener en cuenta que si la mayor palabra tiene 8 letras, preferiblemente has el vector de 9 posiciones para prevenir futuros errores(casi todas las funciones de String usan '\0' para saber guiarse en la cadena).



Y por ultimo después de utilizar cin>> o scanf() utiliza fflush(stdio);

para limpiar el buffer del teclado.



Listo es todo.



este es tu programa modificado:



#include

#include

#include

main()

{

float compra,total,descuento;

char bola[6];

printf("Ingrese el importe de su compra: ");

scanf("%f",&compra);

printf("Ingrese el color de la bola que le salio: ");

fflush(stdin);

gets(bola);

if (strcmp(bola,"roja")==0){

descuento=compra*.20;

total=compra-descuento;

printf("Total a pagar, incluendo descuento es: %f",total);

}

else

if (strcmp(bola,"azul")==0){

descuento=compra*.30;

total=compra-descuento;

printf("Total a pagar, incluendo descuento es: %f",total);

}

else

if (strcmp(bola,"blanca")==0){

descuento=compra*.0;

total=compra-descuento;

printf("Total a pagar, incluendo descuento es: %f",total);

}

getch();

return 0;



}
Master,Inc
2013-03-28 16:53:35 UTC
Saludos!!



Hace mucho que no hago nada en C, espero te sirva suerte!,





#include

#include

main()

{

float compra,total,descuento;

char bola[6];

int azul,roja,blanca; //Nuevas variables

printf("Ingrese el importe de su compra: ");

scanf("%f",&compra);

printf("Ingrese el color de la bola que le salio: ");

scanf("%s",&bola);



azul = strcmp(bola,"azul"); // compara el argumento de entrada con la cadena de caracteres, si es igual devuelve 0, si no un 1

roja = strcmp(bola,"roja"); // compara el argumento de entrada con la cadena de caracteres, si es igual devuelve 0, si no un 1

blanca = strcmp(bola,"blanca"); // compara el argumento de entrada con la cadena de caracteres, si es igual devuelve 0, si no un 1





if (azul == 0){ // si el valor de azul es 0 es igual al argumento de entrada

descuento=compra*.20;

total=compra-descuento;

printf("Total a pagar, incluendo descuento por bola azul es: %f",total);

sleep(10000); //detiene la ejecucion 10 segundos

}



if (roja == 0){

descuento=compra*.30;

total=compra-descuento;

printf("Total a pagar, incluendo descuento por bola roja es: %f",total);

sleep(10000);//detiene la ejecucion 10 segundos

}



if (blanca == 0){

descuento=compra*.0;

total=compra-descuento;

printf("Total a pagar, incluendo descuento por bola blanca es: %f",total);

sleep(10000);//detiene la ejecucion 10 segundos



}

}
?
2014-12-13 00:32:41 UTC
Cada teclado que he comprado en los sitios web es de muy buena calidad, buscando en los sitios web he encontrado un teclado que me ha parecido muy práctico y que me hacía mucha falta, el teclado que compre es como un control remoto para poder ver la tele desde Internet, el teclado está muy bueno, funciona perfectamente y probado, tiene una excelente distancia de funcionamiento, una excelente compra.
2014-12-12 11:44:42 UTC
Como todos tenemos teléfonos en casa, esta aparato tan indispensable en día de hoy, tenía que compra y uno para mi chica, como es tan pequeña lo adecuado es un teléfono de juguete interesante pero lo que he comprado ha estado mucho más interesante de esto, un teléfono que le ha encantado desde primer momento, un teléfono que imita muy bien un teléfono normal, un teléfono con cual puede hablar con su amiga, si están jugando juntos, es el mejor juguete que le he comprado, en su opinión.
C-s@r
2013-03-28 15:37:13 UTC
No soy experto en programación, ni me gusta jaja, pero recuerdo cuando pasé por eso que había una libreria conio.h y servía para poner clrscr() limpiador de pantalla y había una que se ponía hasta abajo al terminar el programa, return 0 y cierras llave final; me suena que por ahí va el asunto, porque lógicamente está bien programado, no hay errores, la computadora sabe que hacer, pero no le estás dando oportuniadad de deterner el programa para mostrarlo, creo yo


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...