-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtype_u.c
More file actions
81 lines (72 loc) · 2.3 KB
/
type_u.c
File metadata and controls
81 lines (72 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* type_u.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jamrabhi <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/11 03:46:25 by jamrabhi #+# #+# */
/* Updated: 2020/02/22 22:17:42 by jamrabhi ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
static int count_digit(unsigned int nb)
{
unsigned int digit;
digit = 0;
if (nb == 0)
return (1);
while (nb != 0)
{
digit++;
nb /= 10;
}
return (digit);
}
static void left_align(unsigned int nb, t_specif *specif)
{
int i;
int nb_len;
i = 0;
nb_len = count_digit(nb);
while (i++ < (specif->precision_value - nb_len))
ft_putchar_count('0');
i--;
if (!(nb == 0 && specif->precision == 1 && specif->precision_value == 0))
ft_putnbr_count(nb);
while (i++ < (specif->width - nb_len))
ft_putchar_count(' ');
}
static void right_align(unsigned int nb, t_specif *specif)
{
int i;
int nb_len;
i = 0;
nb_len = count_digit(nb);
while ((i < (specif->width - nb_len)) || (i < (specif->precision_value
- nb_len)))
{
(i >= (specif->width - specif->precision_value)) ?
ft_putchar_count('0') : ft_putchar_count(' ');
i++;
}
if (!(nb == 0 && specif->precision == 1 && specif->precision_value == 0))
ft_putnbr_count(nb);
}
void type_u(va_list arg, t_specif *specif)
{
unsigned int nb;
nb = va_arg(arg, unsigned int);
if (nb == 0 && specif->precision == 1 && specif->precision_value == 0)
specif->width += 1;
if (specif->zero == 1 && specif->precision == 0 && specif->width != 0
&& !(nb == 0 && specif->precision == 1))
{
specif->precision = 1;
specif->precision_value = specif->width;
}
if (specif->left == 0)
right_align(nb, specif);
if (specif->left == 1)
left_align(nb, specif);
}