为什么此代码不起作用? (我想将数字从二进制转换为十进制) 指针有问题吗?或乘法(char * int)
char cara[100];
char *t=cara;
int i=0;
int sum=0;
int j=0;
int m;
printf("entrer a binary number\n");
scanf("%s",&cara);
while(*t!="\0")
{
j++;
m=j-1;
}
for(i=0;i<j;i++)
{
cara[i]=cara[i]*pow(2,m);
m--;
}
int k;
for(k=0;k<j;k++)
{
sum=sum+cara[i];
}
printf("%d",sum);
}
答案 0 :(得分:2)
第一个错误在这里:
while(*t!="\0")
您必须对字符使用单引号-如while(*t!='\0')
。为了简化起见,您只需编写while(*t)
。
除此问题外,还请注意您从不更新 t
。您需要在循环内添加++t;
。
第二个错误在这里:
cara[i]=cara[i]*pow(2,m);
字符'0'
和'1'
的不具有整数值零和一,因此计算错误。字符'0'
的整数值为48,字符'1'
的整数值为49(请参见https://da.wikipedia.org/wiki/ASCII),因此结果将完全错误。
要使计算更正确,您需要:
cara[i] = (cara[i] - '0') * pow(2,m);
但是,将这些中间结果保存回char
中是一个坏主意。 char
的值不能大于127(如果char
是无符号的,则不能为255),因此您很快就会出现整数溢出。
通常不需要保存这些中间结果,也不需要pow
,因为您只需将每个二进制数字乘以2。
尝试这样:
#include <stdio.h>
int main(void) {
char *bin_str = "11001";
unsigned result = 0;
while (*bin_str)
{
result *= 2;
result += *bin_str == '1' ? 1 : 0;
++bin_str;
}
printf("%d\n", result);
return 0;
}