首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K&R编程语言练习2-3代码返回垃圾

K&R编程语言练习2-3代码返回垃圾
EN

Stack Overflow用户
提问于 2022-01-02 02:19:15
回答 1查看 124关注 0票数 -1

我试着从练习2-3中写一个解决方案。编译后,它在输出时返回随机数。我真不明白这个问题是怎么回事。

任何帮助都很感激。

StackOverflow一直在询问更多细节。程序的目的列在下面的代码中。

更多的熟食。

守则的目的:

编写函数htoi,该函数将十六进制数字字符串(包括可选的0x或0X)转换为其等效的整数值。允许的数字是0到9,a到f,A到F。

代码语言:javascript
复制
/*
 * Write the function htoi(s), which converts a string of hexa-
 * decimal digits (including an optional 0x or 0X) into its
 * equivalent integer value. The allowable digits are 0 through 9,
 * a through f, and A through F.
*/

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

int hti(char s)
{
        const char hexlist[] = "aAbBcCdDeEfF";
        int answ = 0;
        int i;

        for (i=0; s != hexlist[i] && hexlist[i] != '\0'; i++)
                ;
        if (hexlist[i] == '\0')
                answ = 0;
        else
                answ = 10 + (i/2);
        return answ;
}

unsigned int htoi(const char s[])
{
        int answ;
        int power = 0;
        signed int i = 0;
        int viable = 0;
        int hexit;

        if (s[i] == '0')
        {
                i++;
                if (s[i] == 'x' || s[i] == 'X')
                        i++;
        }
        const int stop = i;

        for (i; s[i] != '\0'; i++)
                ;
        i--;

        while (viable == 0 && i >= stop)
        {
                if (s[i] >= '0' && s[i] <= '9')
                {
                        answ = answ + ((s[i] - '0') * pow(16, power));
                }
                else
                {
                        hexit = hti(s[i]);
                        if (hexit == 0)
                                viable = 1;
                        else
                        {
                                hexit = hexit * (pow(16, power));
                                answ += hexit;
                        }
                }
                i--;
                power++;
        }
        if (viable == 1)
                return 0;
        else
                return answ;
}

int main()
{
        char test[] = "AC";
        int i = htoi(test);
        printf("%d\n", i);
        return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-02 03:11:00

answ未在htoi中初始化。初始化为零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70553202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档