作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码应该在用户输入中查找十六进制数字(后跟或不跟 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;
}
}
最佳答案
三个问题:
multiplier * 16;
只是丢弃结果。您需要乘数*= 16
return dec
立即返回 dec
的当前值。您应该在循环之后看到它。
变量dec
未初始化,这意味着它将具有不确定的值。像您一样在没有初始化的情况下使用它会导致未定义的行为。
还有其他问题,其中一些问题会被编译器捕获,从而导致错误或警告。以上三点是我快速浏览后发现的。
关于C 十六进制到十进制转换,我不明白我的代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041351/
我是一名优秀的程序员,十分优秀!