作者:liuluoyu | 来源:互联网 | 2022-12-10 14:28
根据K&R编写的"C编程语言"一书,您可以通过将'\ 0'写入数组中的最后一个变量来指定字符数组的结尾.在将值写入数组后,我以'\ 0'结束它,就像这样.
void itob(int value, char string[], int base)//writes integer c into string s with a base of b
{
int i;
for (i=0; value; i++) {
string[i] = value % base; //Writes remainder of value / base to character array
value = value / base;
}
string[++i] = '\0'; // Ends string with EOF
}
那么为什么当我在for循环中打印字符的值时,它会在一次迭代后停止吗?类似地,当我打印整个字符串时,它会在单个值后停止.
int main()
{
int i = 0;
char string[MAXLINE]; // Max line defined as 1000
int value;
int base;
printf("Enter Value ");
scanf("%d", &value);
printf("\nEnter Base ");
scanf("%d", &base);
itob(value, string, base);
for (i = 0; string[i] != '\0'; i++) {
printf("Char %d = %d\n" , i, string[i]);}
printf("\n%d in base %d = %s" , value, base, string);
}
产量
Enter Value 27
Enter Base 5
Char 0 = 2
27 in base 5 is =
jcarpenter2..
5
基本上你是混合整数值和char值.在itob
您将每个数字存储为数字string[i] = value % base;.对于已知的基数<= 10,该行应更改为string[i] = '0' + value % base
.或者对于<= 36,您可以将其更改为两行static char chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string[i] = chars[value % base]
.无论哪种方式,请确保在继续之前检查基数是否在范围内.
然后,您必须将printf中的第二个%d更改为%c,以表示您正在打印字符.
另请注意,该数字将首先存储为little-endian,最低位数.
编辑:也string[++i] = '\0'
改为string[i] = '\0'
因为i
已经指向所有附加字符后面的索引.
1> jcarpenter2..:
基本上你是混合整数值和char值.在itob
您将每个数字存储为数字string[i] = value % base;.对于已知的基数<= 10,该行应更改为string[i] = '0' + value % base
.或者对于<= 36,您可以将其更改为两行static char chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string[i] = chars[value % base]
.无论哪种方式,请确保在继续之前检查基数是否在范围内.
然后,您必须将printf中的第二个%d更改为%c,以表示您正在打印字符.
另请注意,该数字将首先存储为little-endian,最低位数.
编辑:也string[++i] = '\0'
改为string[i] = '\0'
因为i
已经指向所有附加字符后面的索引.