我不知道这个程序有什么问题。它应该在c中将二进制转换为十进制

时间:2013-10-05 00:22:17

标签: c string

这个程序应该将二进制数转换为十进制数。我是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);
}

3 个答案:

答案 0 :(得分:2)

这句话没有意义:

int i = strlen(str)-i;

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

我相信你的意思是:

int i = strlen(str)-1;   // ONE ... not I

答案 1 :(得分:2)

str[i]是一个字符,无论是'1'还是'0',它都等于48和49作为整数。所以你想将它们转换为1和0来进行乘法运算。

sum = (str[i] - 48) * tmp;

答案 2 :(得分:0)

假设所有变量都已初始化为合理值且str保持输入。以下代码应该可以工作,尽管它不是特别有效。 您可以使用'0''1'代替更加模糊的4849

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