/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

mi primer programa en C y no funciona

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
jesusmarco



Registrado: 22 Sep 2004
Mensajes: 1

MensajePublicado: 23/09/2004 1:21 pm
Título: mi primer programa en C y no funciona

He hecho mi primer programa en C, pero los resultados no son los deseados. Resultado de compilar sin errores. A ver si alguien puede repasármelo. Gracias.
Debería convertir euros a pesetas y pesetas a euros hasta introducir el carácter 'F'.

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

int main()
{
const float CANVI=166.386;
int pessetes;
float euros;
char divisa;

divisa=scanf("%c",&divisa);

while (divisa!='F')
{
if (divisa=='P') {
pessetes=scanf("%d",&pessetes);
euros=(float)pessetes/CANVI;
printf("E");
printf("%f",euros);
} else {
euros=scanf("%f",&euros);
pessetes=(int)euros*CANVI;
printf("P");
printf("%d ",pessetes); }

divisa=scanf("%c",&divisa);
}
printf("F");

system("PAUSE");
return 0;

}
Volver arriba
elColme



Registrado: 14 Abr 2004
Mensajes: 102
Ubicación: España

MensajePublicado: 23/09/2004 1:38 pm
Título:

En divisa metes un char, posteriormente lo sobreescribes con el valor devuelto por scanf, posible suceso no deseado por tu parte.
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 24/09/2004 9:16 am
Título:

La expresión
Código:
 pessetes=(int)euros*CANVI;
no es correcta, ya que lo que haces es convertir 'euros' a entero, con lo que pierdes los decimales, y luego multiplicas.

Sustituye esa línea por:
Código:
  pessetes=(int)(euros*CANVI);
o simplemente
Código:
 pessetes= euros*CANVI;
ya que al asignar un float a un entero, el compilador realiza la conversión.

Te surge un segundo problema, el redondeo, si conviertes un float a int, simplemente pierdes los decimales, pero no redondea. Puedes solucionarlo redondeando tú mismo. Prueba el siguiente código:

Código:
#include <stdio.h>

int main()
{
   int i;
   float f = 166.6;
   char buff[10];

   i = f;
   printf("Directamente: %d\n", i);

   i = f;
   if (f - (int)f >= 0.5)
      i++;
   printf("Redondeo en programa: %d\n", i);

   return 0:
}


Un saludo.
Volver arriba
Yahoo Messenger
chuidiang



Registrado: 29 Ago 2004
Mensajes: 94

MensajePublicado: 24/09/2004 8:24 pm
Título:

Hola:

Una forma rápida de redondeo es sumar 0.5 antes de truncar

Por ejemplo, para redondear 2.3 le sumamos 0.5 y da 2.8. Al truncar queda 2

Para redondear 2.6, le sumamos 0.5 y da 3.1, al truncar queda 3

El código quedaría muy sencillo

Cita:

float a = 2.3;
float b;

b = (int)(a+0.5);


Sed buenos.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com