The C Programming Language, 2nd Edition, by Kernighan and Ritchie
Exercise 3.06 on page 64
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.
Solution by Paul Griffiths
/* EX3_6.C ======= Suggested solution to Exercise 3-6 */ #include <stdio.h> #include <limits.h> void itoa(int n, char s[], int width); void reverse(char s[]); int main(void) { char buffer[20]; itoa(INT_MIN, buffer, 7); printf("Buffer:%s\n", buffer); return 0; } void itoa(int n, char s[], int width) { int i, sign; if ((sign = n) < 0) n = -n; i = 0; do { s[i++] = n % 10 + '0'; printf("%d %% %d + '0' = %d\n", n, 10, s[i-1]); } while ((n /= 10) > 0); if (sign < 0) s[i++] = '-'; while (i < width ) /* Only addition to original function */ s[i++] = ' '; s[i] = '\0'; reverse(s); } void reverse(char s[]) { int c, i, j; for ( i = 0, j = strlen(s)-1; i < j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } }










