# Exercise 3.6 - itoa with field width¶

## Question¶

Write a version of itoa that accepts three arguments instead of two. The third argument is a minimum field width; the converted number must be padded with blanks on the left if necessary to make it wide enough.

```
/* a function of itoa, which accepts the third argument as the width of the
number. the string representation is padded with blanks in the left to get the
required width */
#include <stdio.h>
#include <string.h>
#define MAXLIMIT 100
void itoa(int n, char s[], int w);
void reverse(char s[]);
int main(void) {
int number, width;
char str[MAXLIMIT];
number = -343565;
width = 10;
itoa(number, str, width);
printf("%s", str);
return 0;
}
void itoa(int n, char s[], int w) {
int i, sign;
if ((sign = n) < 0)
n = -n;
i = 0;
do {
s[i++] = (n % 10) + '0';
} while ((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
while (i < w)
s[i++] = ' ';
s[i] = '\0';
reverse(s);
}
void reverse(char s[]) {
int i, j, c;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
c = s[i], s[i] = s[j], s[j] = c;
}
```

## Explanation¶

Note: For negative numbers the negative sign is written close to the number
instead of before the padded width. This is `itoa`

conversion with padding. We
specify the width of the number we want in `w`

and as before, we proceed with
`itoa`

, wherein extract the unit digit (n `% 10`

), convert it to character and
store it in a character array. If it were a negative number we store the sign
too. We keep track of number of digits in the number in a variable, `i`

and for
the remaining digits, for `i < w`

, we append the space character “ “.

We reverse the string thus constructed for our result.