【发布时间】:2019-03-05 17:56:15
【问题描述】:
我正在尝试将基数 20 转换为 int。例如,如果我有"1A",则需要将其转换为30,依此类推。我已经开发了代码,但它在运行时出现了问题。 C编程语言代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
char converted[20] = "1A";
itov(converted);
return 0;
}
void itov(char vigesimalStr[])
{
int length = 0;
for (int i = 0; vigesimalStr[i] != '\0'; i++)
{
length++;
}
int base = 20;
int result = 0;
int power = 1;
int num = 0;
for (int j = length; j >= 0; j--)
{
if (val(vigesimalStr[j]) >= base)
{
printf("Invalid Number");
return -1;
}
num += val(vigesimalStr[j]) * power;
power = power * base;
}
}
int val(char c)
{
if (c >= '0' && c <= '9')
return (int)c - '0';
else
return (int)c - 'A' + 10;
}
【问题讨论】:
-
这是一项禁止使用
strtol-family 功能的练习或家庭作业吗?如果没有,我会使用其中之一。 -
“运行中的问题”不是有效的问题描述。也请正确缩进你的代码。
-
FWIW
val和itov在使用前没有原型。 -
我在下面添加了 val 函数。你可能会看到它。我可以使用 strtol 函数,但如何像其他语言一样获取 int(c) 值。
-
power = power * base;可以int溢出(未定义的行为),即使num += val(vigesimalStr[j]) * power;不会。