sprintf pro mplab comando c printf

mplab - sprintf pro c



Uso simple de sprintf-C (4)

Esto se debe a que 5 es un entero ( int ), y le está diciendo a sprintf que finja que es un número de punto flotante de doble precisión ( double ). Necesitas cambiar esto:

sprintf(word,"%.9g", 5);

a cualquiera de estos

sprintf(word,"%.9g", 5.0); sprintf(word,"%.9g", (double) 5);

Estoy tratando de averiguar por qué ocurre un problema más grande, usando un programa más pequeño como ejemplo. Este programa más pequeño no funciona, lo que me lleva a creer que mi comprensión de la función es defectuosa.

Por lo que creía, el siguiente programa debería inicializar una cadena con hasta 30 caracteres, luego tomar el número ''5'' a nueve cifras significativas y convertirlo en esa cadena. El programa debería imprimir el valor ''5.00000000''. Sin embargo, el programa imprime el valor 7.96788 (...). ¿Por qué es esto?

#include <stdio.h> int main() { char word[30]; sprintf(word, "%.9g", 5); printf(word); return 0; }


O puede cambiar el formato del descriptor: "%.9d"


Utilice 5.0 lugar. 5 por sí mismo es un número entero y se verá enredado para que parezca un flotador, que es de donde proviene su 7.xxxx.


Veo dos problemas:

  1. Como ya han dicho otros, debe especificar un double lugar de un int . Es posible que su compilador tenga un interruptor para imprimir advertencias en estos casos (por ejemplo, -Wall in gcc).

  2. Para imprimir 5.00... , debe usar %f lugar de %g .

Eso da sprintf(word,"%.9f", (double) 5); como la sintaxis correcta.