elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Double en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Double en C  (Leído 3,818 veces)
xoker

Desconectado Desconectado

Mensajes: 24



Ver Perfil WWW
Double en C
« en: 19 Julio 2014, 11:16 am »

Buenas a todos, vereis despues de muchisimo tiempo me he encontrado con un problema con los double en C, es con el siguiente codigo:

Código:
#include <stdio.h>

int main(){

double a;

printf("Introduce un valor: ");
scanf("%f",&a);

printf("%f",a);

system("pause");
return 0;
}

Como podeis ver, no puede ser un codigo mas tonto, leo un double por teclado y lo imprimo por pantalla. Pues bien, introduzca el numero que introduzca, siempre me sale 0 por pantalla, tras pasarle el depurador, sucede que en el momento de hacer el scanf lo que lee no es el numero que yo meto, sino que introduce en la variable un numero en notacion cientifica bajisimo, muy proximo a cero, por eso por pantalla aparece el cero. Tambien he probado a quitar el scanf y darle yo un valor a mano a la variable y se imprime correctamente, por lo que confirmo que la culpa es del scanf.

Para solucionar este error, lo que he hecho a la hora de leer por teclado es sustituir scanf("%f", &a); por scanf("%lf",&a); es decir, en vez de usar %f uso %lf y ya funciona correctamente.

¿Es todo esto normal? Yo juraria que en mis mas de dos años usando C, nunca he tenido este problema. Realmente no me ha ocurrido a mi originalmente, le ocurrio a un amigo y cuando fui a probar en mi PC tambien ocurria lo mismo, ambos tenemos el compilador MingGW GCC 4.8.1.

Por ultimo, he mirado en internet y libros y todos lo hacen como yo  :o, con un scanf("%f",...).

Un saludo.


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Double en C
« Respuesta #1 en: 19 Julio 2014, 12:08 pm »

Lo que un compilador tiene que implementar es que
sizeof float sea menor o igual a sizeof double.

Sospecho que en ese compilador el primer sizeof es menor estricto que el segundo, lo que hace razonable el comportamiento que obtienes.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: Double en C
« Respuesta #2 en: 19 Julio 2014, 12:09 pm »

El problema se soluciona como tu dices, cambiando el %f por %lf
Código
  1. scanf("%lf",&a);
  2.  
Código
  1. printf("%lf",a);
  2.  

De todas formas ese error te lo da el compilador  :rolleyes:

Citar
aviso: formato ‘%f’ espera un argumento de tipo ‘float*’, pero el argumento 2 es de tipo ‘double*’ [-Wformat]

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
xoker

Desconectado Desconectado

Mensajes: 24



Ver Perfil WWW
Re: Double en C
« Respuesta #3 en: 19 Julio 2014, 13:27 pm »

Ya la verdad que tengo curiosidad, os ha pasado a vosotros anteriormente? es esto algo nuevo de la ultima version del compilador?

La verdad que me he llevado una gran sorpresa!
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Double en C
« Respuesta #4 en: 20 Julio 2014, 17:00 pm »

La especificacion del lenguaje indica que sizeof(float) <= sizeof(double), esto permite que algunos compiladores tomen la opcion de hacerlos de igual tamaño y otros hacer que el double use mayor tamaño.

Un codigo escrito leyendo un double usando %f es un codigo no portable de un compilador a otro.

En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
double duda
Multimedia
0v1m 4 2,475 Último mensaje 27 Mayo 2007, 19:52 pm
por 0v1m
indizacion-double
.NET (C#, VB.NET, ASP)
makinavaja3500 1 2,754 Último mensaje 25 Julio 2008, 04:49 am
por MANULOMM
Double a Char [C++]
Programación C/C++
Talard 2 4,147 Último mensaje 19 Febrero 2012, 19:06 pm
por Akai
Double
Programación General
<<<-Basura->>> 2 1,942 Último mensaje 11 Octubre 2012, 17:53 pm
por Castiblanco
Double C# y Double SQLITE (Separadores con Punto y Coma)
.NET (C#, VB.NET, ASP)
MauroMasciar 3 4,604 Último mensaje 10 Diciembre 2017, 17:20 pm
por Maurice_Lupin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines