-8

好吧,这个程序应该将二进制数转换为十进制数。我是 C 新手,我对 C 编码不是很有信心。尝试并编写了这个程序,但运行不正常。而且我不知道这里出了什么问题。需要一些帮助来完成这个程序。谢谢

binaryToDecimal(char str[]) {
    for(int i = strlen(str)-i; i>=0; i--) {
        if(str[i] == 48 || str[i] == 49) {
            int tmp = pow(2, counter);
            int sum= str[i]*tmp;
            counter++;
            answer += sum;
        } else if(str[i]>49 || str[i]<48) {
            printf("error");
        }
    }
    printf("%d", &answer);
}
4

3 回答 3

2

这句话没有意义:

int i = strlen(str)-i;

i尚未初始化,但您正在表达式中使用它!

我相信你的意思是:

int i = strlen(str)-1;   // ONE ... not I
于 2013-10-05T00:27:08.977 回答
2

str[i]是一个字符,可以是“1”或“0”,正如你所拥有的那样,它等于 48 和 49 作为整数。因此,您想将它们转换为 1 和 0,它们进行乘法运算。

sum = (str[i] - 48) * tmp;
于 2013-10-05T00:31:15.383 回答
0

假设所有变量都已初始化为合理值并str保存输入。以下代码应该可以工作,尽管它不是特别有效。您可以使用'0'and'1'而不是更晦涩的48and 49

for (i = strlen(str)-1, j = 0; i >= 0; --i, ++j) { 

   if (str[i] != '0' && str[i] != '1') {
       printf("ERROR: unxepected input\n");
       exit(EXIT_FAILURE);
   }

   if (str[i] == '1')
       sum += pow(2, j);
}

打印结果时提供值而不是地址,例如

printf("%d\n", sum);  // (!) not &sum
于 2013-10-05T00:57:16.497 回答