Printf форматирует целое число, чтобы отображались максимум и минимум 2 цифры - PullRequest
0 голосов
/ 27 февраля 2019

В одном из моих назначений требуется одна строка для printf "Моему другу __ лет", где пустое пространство должно содержать не более и не менее 2 цифр из целого числа, но независимо от того, что я пытаюсь, ничегоработает ...

Вот мой код:

int age = 22332;

printf("My friend is %2.2i years old.",age);

И все же получается, что

Моему другу 22332 года.

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

"%2.2i" печатает с минимумом из 2 символов 1 (первый 2), с отступом по мере необходимости и не менее 2 цифрами (2-й 2).

Чтобы "иметь ... минимум 2 цифры", используйте "%.2i"

Чтобы "иметь ... минимум 2 цифры", убедитесь, что значение находится в диапазоне[-99 ... 99].Например, используйте age % 100

printf("My friend is %.2i years old.",age%100);

Люди старше 99 Жанна Калмент , Метузела , Имхотеп напечатает усеченныйyear.@Jonathan Leffler


1" минимум из 2 символов" включает в себя символ потенциального знака.

0 голосов
/ 27 февраля 2019

Если вы хотите контролировать количество выводимых цифр минимум , вы можете использовать спецификатор длины, например %.2d.Однако вы не можете ограничивать количество выводимых цифр максимум .

Вместо этого вы можете ограничить значение int до вызова:

#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif

printf("My friend is %.2d years old.\n", min(age, 99));
0 голосов
/ 27 февраля 2019

Для спецификатора формата %i цифра перед десятичной запятой указывает минимальную ширину поля, которая представляет собой число пробелов, которые займет значение, а число после десятичной запятой - это минимальное количество отображаемых цифр, означающеечто результат будет дополнен нулями, если он будет слишком коротким.

Невозможно отобразить меньше цифр, чем необходимо, чтобы вывести число для целого числа.Только для типов с плавающей точкой вы можете отображать меньше цифр.

...