Lectura en valores dobles con scanf en c
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.
Utilice el %lf
especificador 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 %lf
especificador de formato para imprimir los resultados:
printf("%lf %lf",a,b);
Hasta donde yo sé, %d
significa decádico, que es un número sin punto decimal. si desea cargar un valor doble, utilice %lf
la conversión (flotación larga). para printf sus valores son incorrectos por la misma razón, %d
se 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);