gpt4 book ai didi

c - 如何修复此代码(使用 c 中的 char 将二进制转换为十进制)?

转载 作者:太空宇宙 更新时间:2023-11-04 07:46:02 25 4
gpt4 key购买 nike

为什么这段代码不起作用? (我想将数字从二进制转换为十进制)指针有问题?或乘法(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);
}

最佳答案

第一个错误在这里:

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;
}

关于c - 如何修复此代码(使用 c 中的 char 将二进制转换为十进制)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56951199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com