gpt4 book ai didi

C 十六进制到十进制转换,我不明白我的代码有什么问题

转载 作者:行者123 更新时间:2023-11-30 20:35:34 25 4
gpt4 key购买 nike

我的代码应该在用户输入中查找十六进制数字(后跟或不跟 0x),将它们作为字符串复制到数组中,并且每次找到非 1-9 a-f A-F 字符或 EOF 时,都应该执行htoi 函数将字符串中的字符转换为十进制数字,从右到左进行,并使用乘数来计算位置。它没有做它应该做的事情。它生成的数字与我的十六进制数字的十进制等值无关。

#include <stdio.h>
#include <string.h>
#include <math.h>

int htoi(char num[]);

int main()
{
int c,i = 0;
char num[1000];
while ((c = getchar()) != EOF)
{
if ((c > '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'a' && c <= 'f'))
{
num[i] = c;
i++;
}
else if (c == '0')
{
if ((c = getchar) == 'x' || c == 'X')
{
num[i] = '\0';
printf("%d", htoi(num));
i=0;
}
else
{
num[i] = c;
i++;
}
}
else
{
num[i] = '\0';
if (num[0] != '\0')
{
printf("%d", htoi(num));
}
i=0;
}


}
num[i] = '\0';
if (num[0] != '\0')
{
printf("%d", htoi(num));
}
i=0;
return 0;
}

int htoi(char num[])
{
int c,i, dig;
int dec;
int multiplier = 1;

for (i = strlen(num)-1; i >= 0; i--)
{
c = num[i];
if (c > '0' && c <= '9')
{
dig = c - '0';
}
else if (c > 'a' && c <= 'f')
{
dig = c - 'a' + 10;
}
else if (c > 'A' && c <= 'F')
{
dig = c - 'A' + 10;
}
dec = dec + dig * multiplier;
multiplier * 16;
return dec;
}
}

最佳答案

三个问题:

  1. multiplier * 16; 只是丢弃结果。您需要乘数*= 16

  2. return dec 立即返回 dec 的当前值。您应该在循环之后看到它。

  3. 变量dec未初始化,这意味着它将具有不确定的值。像您一样在没有初始化的情况下使用它会导致未定义的行为

还有其他问题,其中一些问题会被编译器捕获,从而导致错误或警告。以上三点是我快速浏览后发现的。

关于C 十六进制到十进制转换,我不明白我的代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041351/

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