这个程序应该将二进制数转换为十进制数。我是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);
}
答案 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'
代替更加模糊的48
和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