Вы не можете делать именно то, что вы хотите. Я думаю, что самое близкое что-то вроде этого:
#include <stdio.h>
#include <math.h>
// FILLER_DASH needs to be long enough for all use cases
const char *FILLER_DASH = "---------------------------------------------------";
int main(void) {
const int field_width = 10;
for (int number = 1 ; number < 1100000; number += (number + 90)) {
// zero or negative numbers not supported by this simple formula
int digits = log10(number) + 1;
printf("%.*s%d\n", field_width - digits, FILLER_DASH, number);
}
return 0;
}
Он использует спецификатор формата *
для получения ширины поля из аргументов, а затем использует строку для предоставления символов для печати.
Он использует логарифм с основанием 10 для получения числа цифр с основанием 10 в числе, что включает неявное преобразование из int
в double
для функции логарифма, а затем обратно в int
для printf
формата. Этот логарифм определен только для положительных чисел (так что в этом случае целые числа 1 и выше), если вы хотите поддержку 0 или отрицательного числа, то их нужно обрабатывать как особые случаи (в основном это 3-х ветвь if-elseif-else).