我写了一个程序来写不同基数的数字(基数 10,二进制,基数 53,等等...)
我最初在 Visual c++ 2010 中将其编写为 win32 控制台应用程序,然后将其转换为 Windows 窗体应用程序(我知道,我知道......)
在原始形式中,它工作得很好,但在转换后,它就停止了工作。我将问题缩小到这个:
该程序使用一个接收数字并返回字符的函数:
char corresponding_digit(int digit)
{
char corr_digit[62] = {'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P' ,'Q','R','S' ,'T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p' , 'q','r','s' ,'t','u','v','w','x','y','z'};
return corr_digit[digit];
}
该函数接受从1到61的数字,并返回对应的字符:0-9 -> 0-9;10-35 -> 亚利桑那州;36-61 a->z。
该程序使用如下函数:
//on a button click
//base is an integer got from the user
String^ number_base_n = "";
if(base == 10)
number_base_n = value.ToString();
else if(base==0)
number_base_n = "0";
else
{
int digit, power, copy_value;
bool number_started = false;
copy_value = value;
if(copy_value > (int)pow(float(base), MAX_DIGITS)) //cmath was included
number_base_n = "Number too big";
else
{
for(int i = MAX_DIGITS; i >= 0; i--)
{
power = (int)pow(float(base), i);
if(copy_value >= power)
{
digit = copy_value/power;
copy_value -= digit*power;
number_started = true;
number_base_n += corresponding_digit(digit);
}
else if (number_started || i==0)
{
number_base_n += "0";
}
}
}
}
textBox6->Text = number_base_n;
经过一番调试,我意识到当函数对应数字被调用时出现问题,数字值“1”,它应该返回“1”,在表达式中
//number base_n equals ""
number_base_n += String(corresponding_digit(digit));
//number_base_n equals "49"
number_base_n,从“”开始,以“49”结尾,其实就是1的ASCII值。我上网查了一下,得到的只是转换结果,用String(value)或value.ToString(),但显然我不能做
number_base_n += corresponding_digit(digit).ToString();
我尝试使用辅助变量:
aux = corresponding_digit(digit);
number_base_n += aux.ToString();
但我得到了完全相同(错误)的结果......(与 String(value) 相同)
我又摸索了一下,但我相信没有什么值得一提的。那么……有什么帮助吗?
另外:base 10 和 base 0 运行良好
编辑:如果投反对票的人愿意评论并解释他投反对票的原因......建设性的批评,我相信是这个词。