[C con Clase] Duda

Steven Davidson srd4121 en njit.edu
Dom Jul 8 06:16:39 CEST 2012


Hola Petter,

On 7/7/2012 9:53 PM, Petter wrote:
> Ayudenme tengo lo siguiente y me sale error.
> *******************************************************
>

Veamos el código fuente.

> #include <stdio.h>
> #include <conio.h>
> void main ()
> {
> clrscr ();
> int vc,dt,tp;
> char cb[10];
> printf ("\n\t\t\t Lea valor a cancelar y color de la bolita");
> printf ("\n\n Ingrese el valor a cancelar");
> scanf ("%d",&vc);
> printf ("\n Ingrese el color de la bolita");
> scanf ("%c",cb);

Aunque esto sea correcto, no es lo que realmente te interesa. Lo que 
quieres es almacenar un solo carácter. Para esto, define 'cb' como 
'char' y no como un array de 'char'. Esto es,

char cb;
...
scanf( "%c", &cb );

> if (cb='r')

Aquí tienes el error lógico. Te interesa el operador == de comparación. 
Recuerda que el operador = es de asignación.

> 	{
> 	printf ("\n Obtendra un descuento del 40%");

Ten presente que el carácter del porcentaje en 'printf()' es un carácter 
especial. Por lo tanto, para indicar este carácter, debes escribirlo dos 
veces. Esto es,

printf( "\n Obtendra un descuento del 40%%" );

>     dt=vc*0.4;
>     tp=vc-dt;

Estos cálculos no tienen sentido ya que las variables son de tipo 'int'. 
Por lo tanto, tendrás problemas de tipificación debidos al tipo de la 
constante '0.4' que es de tipo 'double'.

Te interesa manejar variables de un tipo de coma flotante, como 'float' 
o 'double'. Esto sería,

float vc, dt, tp;
...
dt = vc*0.4f;
tp = vc-dt;

>     }
> else
>     if (cb='a')
>     {
>     printf ("\n Obtendra un descuento del 25%");
>     dt=vc*0.25;
>     tp=vc-dt;

Aquí tienes los mismos errores que antes.

>     }
> else
> 	if (cb='b')
>     {
> 	printf ("\n Obtendra un descuento del 10%");
>     dt=vc*0.1;
>     tp=vc-dt;

Nuevamente, tienes los mismos errores que mencionamos antes.

>     }
> printf ("\n El Total a Pagar es: %d",tp);

Con los cambios anteriores, ahora sería:

printf( "\n El Total a Pagar es: %f", tp );

> getch ();
> }

Por la lógica que describes, sugiero usar un 'switch/case', ya que las 
condiciones tienen que ver con el valor de 'cb'. Esto es,

switch( cb )
{
   case 'r': ...
   case 'a': ...
   case 'b': ...
}

Tampoco tiene sentido usar 'dt' en tu programa, ya que sabes con 
anterioridad el descuento. Por ejemplo, para el primer caso, podríamos 
escribir directamente,

tp = vc * 0.60f;  // -40% => 60% del valor original

Asimismo, los demás casos son:

tp = vc * 0.75f;
tp = vc * 0.90f;


Espero haber aclarado las dudas.

Steven





Más información sobre la lista de distribución Cconclase