【发布时间】:2013-05-08 05:06:48
【问题描述】:
这段代码是将十进制数转换为二进制的函数的一部分,将其放置在由调用函数创建并通过引用传递的 char instBin[33] 的特定索引中。它传入十进制数,即您想要的二进制位数(在给定的 bin 编号前面附加额外的 0)。我已经摆弄了一段时间,但我无法将 0 和 1 放入数组中。我已经明白了 instBin[i] = '1';根本不工作——当我打印 instBin 时,什么也没发生。我看过其他做这种事情的例子,但似乎在选择索引时给字符数组一个变量应该可以工作......有什么想法为什么我的不是?
int printBin(int num, int numBits, int startIndex, char * instBin){
int r, i; /* r for remainder, i for index */
const int FAIL = 0;
i = startIndex + numBits; /* start indexing at end of current segment */
while (num > 0)
{
/* as long as i >= startIndex, we can still add to array */
if (i >= startIndex){
r = num % 2; /* find the remainder */
if (r == 1)
instBin[i] = '1';
else /* r == 0 */
instBin[i] = '0';
num /= 2; /* then actually divide the number */
i--;
}
else /* num is too big to fit in given number of bits */
return FAIL;
}
/* return the 1 for success*/
return 1;
}
【问题讨论】:
-
欢迎来到 Stack Overflow。请尽快阅读FAQ。请显示函数定义行(带有返回类型、函数名和参数声明的那一行)!定义 FAIL 很好;为什么不定义 PASS 或 SUCCESS 或其他什么?在 Unix 上,系统函数通常返回 0 表示成功——这与您使用的约定相反。
-
提示:您可以简单地写
instBin[i]='0'+num%2;。而像/* find the remainder */这样的 cmets 不会在你的代码中添加任何信息。 -
好建议,谢谢!哦,对于 Sergi0,instBin 被定义为:char instBin[33]; //一个空字节的位置
-
我认为这段代码工作正常,只要参数没问题。你怎么称呼它?你如何打印数组的内容?如果是字符串,则需要在末尾添加
'\0'。 -
我把 '\0' 放在 instBin[32] 的调用函数中。就在它到达“instBin[i] = '1';”的时候实际上,instBin 没有任何反应,如果我在它后面放一个 printf,它什么也没有显示。使用立即数 (1, 2, 3) 添加到 instBin 很好,但是当我在这种情况下使用此变量时,它什么也没做。
标签: c string loops indexing char