Простое использование sprintf - C - PullRequest
21 голосов
/ 22 ноября 2011

Я пытаюсь выяснить, почему возникает большая проблема, используя в качестве примера небольшую программу.Эта меньшая программа не работает, и это заставляет меня поверить, что я неправильно понимаю функцию.

Насколько я (полагал), следующая программа должна инициализировать строку длиной до 30 символовзатем возьмите число от 5 до девяти значащих цифр и превратите его в эту строку.Затем программа должна вывести значение «5.00000000».Тем не менее, программа печатает значение 7,96788 (...).Почему это?

#include <stdio.h>

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

Ответы [ 4 ]

22 голосов
/ 22 ноября 2011

Это потому, что 5 - это целое число (int), и вы говорите sprintf, притворяясь, что это число с плавающей запятой двойной точности (double).Вам нужно изменить это:

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

на любой из этих:

sprintf(word,"%.9g", 5.0);
sprintf(word,"%.9g", (double) 5);
1 голос
/ 22 ноября 2011

Я вижу две проблемы:

  1. Как уже говорили другие, вы должны указать double вместо int. В этих случаях ваш компилятор может переключаться на вывод предупреждений (например, -Wall в gcc).

  2. Чтобы распечатать 5.00..., вы должны использовать %f вместо %g.

Это дает sprintf(word,"%.9f", (double) 5); в качестве правильного синтаксиса.

1 голос
/ 22 ноября 2011

Используйте 5.0 вместо. 5 само по себе является целым числом и будет выглядеть как поплавок, отсюда и ваш 7.xxxx.

0 голосов
/ 21 мая 2014

Или вы можете изменить формат дескриптора: "%.9d"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...