#include <stdio.h>
void reverse(char s[]);
void itob(int n, char s[], int);
void runItob() {
int testn = 1987654321;
char test[100];
itob(testn, test, 10);
printf("test:%s", test);
}
void itob(int n, char s[], int b) {
int i = 0;
do {
s[i++] = n % b + '0';
} while ((n /= b) > 0);
s[i] = '\0';
reverse(s);
}
练习3-6 修改itoa函数,使得该函数可以接收三个参数。第三个参数为最小字段宽度。为了保证转换后结果至少具有第三个参数指定的最小宽度,必要时在结果左边填充一定的空格。
1 #include <stdio.h>
2
3 void reverse(char s[]);
4 void itoa2(int n, char s[], int width);
5
6 void runItoa2() {
7 int testn = -1987654321;
8 char test[100];
9
10 itoa2(testn, test,20);
11 printf("test:%send\n", test);
12 }
13
14 void itoa2(int n, char s[], int width) {
15 int i, sign;
16 sign = n;
17
18 if (((unsigned)sign << 1) == 0)
19 n = (unsigned)n;
20 else if (sign < 0)
21 n = -n;
22 i = 0;
23 do {
24 s[i++] = n % 10 + '0';
25 } while ((n /= 10) > 0);
26 if (sign < 0)
27 s[i++] = '-';
28 while (width - i > 0) {
29 s[i++] = ' ';
30 }
31 s[i] = '\0';
32 reverse(s);
33 }