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
中初始化。将其初始化为零。
我试着写一个练习 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
中初始化。将其初始化为零。