| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
jesusmarco
Registrado: 22 Sep 2004 Mensajes: 1
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | chuidiang
Registrado: 29 Ago 2004 Mensajes: 94
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |