问题:写一函数,输入一个十六进制数,输出相应的十进制数。
程序的运行示例如下:
输入十六进制数:
3a
十进制数58
继续吗?
y
输入十六进制数:
2f
十进制数47
继续吗?
N
#include <stdio.h>
#define MAX 1000
int main()
{
int c, i, flag, flag1;
char t[MAX];
i = 0;
flag = 0;
flag1 = 1;
printf("\n输入十六进制数:");
while ((c = getchar()) != '\0' && i < MAX && flag1)
//int c不是int吗为什么能直接用getchar,getchar不是只能输入字符码?以及16进制中也包含字母,用int c不会出错吗?
{
if (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')
{
flag = 1;
t[i++] = c; //这里的int为什么直接转化为char了?
}
else if (flag)
{
t[i] = '\0';
printf("\n十进制数%d\n", htoi(t));
printf("继续吗?");
c = getchar();
if (c == 'N' || c == 'n')
{
flag1 = 0;
}
else
{
flag = 0;
i = 0;
printf("\n输入十六进制数:");
}
}
}
return 0;
}
htoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
n = n * 16 + s[i] - '0';
}
if (s[i] >= 'a' && s[i] <= 'f')
{
n = n * 16 + s[i] - 'a' + 10;
}
if (s[i] >= 'A' && s[i] <= 'F')
{
n = n * 16 + s[i] - 'A' + 10;
}
}
return n;
}
我把疑惑写在相应代码行了,以及我不太能理清这个代码里面十六进制的输入和int char之间的关系,求解答,谢谢。