K&R C Programming Language Exercise 2-3 code returns 垃圾

K&R C Programming Language Exercise 2-3 code returns rubbish

我试着写一个练习 2-3 的解决方案。编译后,输出returns个随机数。我真的不明白这个问题是从哪里来的。

感谢任何帮助。

Whosebug 一直要求提供更多详细信息。该程序的目的在下面的代码中列出。

更多延迟。

代码的用途:

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

/*
 * 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] != '[=11=]'; i++)
                ;
        if (hexlist[i] == '[=11=]')
                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] != '[=11=]'; 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;
}

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