Добавление функции tool_uint_pow и доработка форматированного вывода

This commit is contained in:
Aren Elchinyan 2024-01-18 22:10:10 +03:00
parent 5febf988a5
commit 4fee1d1c64
1 changed files with 25 additions and 5 deletions

View File

@ -160,29 +160,42 @@ int is_digit(char c) {
return 0;
}
int char_to_digit(char c) {
if (is_digit(c)) { return (int)(c - '0'); }
int64_t char_to_digit(char c) {
if (is_digit(c)) { return (int64_t)(c - '0'); }
return -1;
}
uint64_t tool_uint_pow(uint64_t d, uint64_t n) {
uint64_t result = 1;
for (uint64_t i = 0; i < n; i++) { result *= d; }
return result;
}
// Функция для форматированного вывода
void tool_format(void (*putc)(char c), const char *format_string, va_list args) {
while (*format_string != '\0') {
if (*format_string == '%') {
char buf[48];
uint64_t i_temp = 0;
uint64_t point = 0;
char *arg_s;
int64_t arg_d = 0;
uint64_t arg_u = 0;
uint64_t width = 0;
int64_t width = 0;
format_string++;
if (is_digit(*format_string)) {
width = char_to_digit(*format_string);
while (is_digit(*format_string)) {
arg_u += char_to_digit(*format_string);
if (is_digit(*(format_string + 1))) { arg_u *= 10; }
format_string++;
i_temp++;
}
width = arg_u;
if (*format_string == '\0') {
break; // Неожиданный конец строки формата
}
@ -192,6 +205,13 @@ void tool_format(void (*putc)(char c), const char *format_string, va_list args)
case 'c': putc(va_arg(args, int)); break;
case 's':
arg_s = va_arg(args, char *);
if (width) { width -= tool_strlen(arg_s); }
while (width > 0) {
putc(' ');
width--;
}
// Вывод каждого символа строки
while (*arg_s != '\0') {
putc(*arg_s);