В чем проблема со спецификатором формата C ++ - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующий код:

#include <cstdio>

int main()
{
    float b = 323.23f;
    std::scanf("%6.3f\n", &b);  // <-- Warning
    std::printf("%6.3f\n", b);
}

При scanf() появляется предупреждение:

Неверный спецификатор преобразования '.'

Есть ли что-то, чего мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Спецификатор формата для scanf не требует явного указания количества знаков после десятичной точки.Кроме того, это то, что вызывает предупреждение, лучше использовать просто %f внутри scanf, хотя %6f также работает.

Это не относится к printf хотя.Когда вы используете [some_number].[number_of_places]f, как, например, 6.3f в printf, тогда как .3f будет влиять на количество знаков после запятой, которое будет отображаться, 6 в нем резервирует, чтомного пробелов для отображения всего числа.

Надеюсь, это поможет в некоторой степени.

0 голосов
/ 01 октября 2018

Спецификатор формата в C не принимает значение «6.3». Вы можете использовать «% 6f» или просто «% f».«% 6.3f» - это то, что вызывает предупреждение.

0 голосов
/ 01 октября 2018

Когда вы используете %6.3f с printf, .3 определяет точность вывода.

scanf вам не нужно указывать точность, потому что она примет любую точностьон находит во входном потоке.Таким образом, вам не разрешено указывать .3 (или .-что-нибудь еще) в формате scanf.Просто используйте %6f или даже %f.

...