简单使用sprintf - C.

Cap*_*rog 21 c printf

我试图弄清楚为什么会出现更大的问题,使用较小的程序作为例子.这个较小的程序不起作用,让我相信这是我对有缺陷的功能的理解.

据我所知,下面的程序应该初始化一个最多30个字符的字符串,然后将数字"5"取为9个有效数字,并将其转换为该字符串.然后程序应打印值"5.00000000".但是,程序打印值7.96788(...).为什么是这样?

#include <stdio.h>

int main()
{
    char word[30];
    sprintf(word, "%.9g", 5);
    printf(word);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 22

这是因为5是一个整数(int),你告诉sprintf它假装它是一个双精度浮点数(double).你需要改变这个:

sprintf(word,"%.9g", 5);
Run Code Online (Sandbox Code Playgroud)

以下任何一个:

sprintf(word,"%.9g", 5.0);
sprintf(word,"%.9g", (double) 5);
Run Code Online (Sandbox Code Playgroud)