Lectura en valores dobles con scanf en c

Resuelto user1880009 asked hace 12 años • 7 respuestas

Intento leer 2 valores usando scanf() en C, pero los valores que el sistema escribe en la memoria no son iguales a los valores ingresados. Aquí está el código:

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);

Si ingreso 1 y 2, CMD devuelve un correcto, pero b = -858993460 Esto es lo que ya probé: usar float o int en lugar de double, usar scanf_s, usar scanf("%d o %f para %i o %li o %lf o %e o %g ), usando fflush(stdin) para borrar el búfer del teclado, leyendo en b primero, probando todas las combinaciones posibles. Descubrí que hay un problema con la longitud de double en el sistema operativo de 32 bits, de modo que se ve obligado a usar scanf("%lf", &f) para leer en doble. No importa lo que haga, el segundo valor siempre es incorrecto.

Utilizo MS VS express 2012 para escritorio en el sistema operativo Windows 7 de 32 bits.

user1880009 avatar Dec 06 '12 01:12 user1880009
Aceptado

Utilice el %lfespecificador de formato para leer un doble:

double a;
scanf("%lf",&a);

Wikipedia tiene una referencia decente para los especificadores de formato disponibles.

También deberá utilizar el %lfespecificador de formato para imprimir los resultados:

printf("%lf %lf",a,b);
simonc avatar Dec 05 '2012 18:12 simonc

Hasta donde yo sé, %dsignifica decádico, que es un número sin punto decimal. si desea cargar un valor doble, utilice %lfla conversión (flotación larga). para printf sus valores son incorrectos por la misma razón, %dse usa solo para números enteros (y posiblemente caracteres si sabe lo que está haciendo).

Ejemplo:

double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n"); 
scanf("%lf",&b);
printf("%lf %lf",a,b);
Kyborek avatar Dec 05 '2012 18:12 Kyborek