简单使用sprintf – C.

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

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

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

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

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

以下任何一个:

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

我看到两个问题:

  1. 正如其他人已经说过的那样,你必须指定一个double而不是int 。 在这些情况下,您的编译器可能会打开警告(例如,在gcc中打开)。

  2. 要打印5.00... ,您应该使用%f而不是%g

这给了sprintf(word,"%.9f", (double) 5); 作为正确的语法。

请改用5.05本身就是一个整数,并且会被看作是一个浮点数,这就是你的7.xxxx来自的地方。

或者您可以更改描述符格式: "%.9d"