我正在完成一项任务并将其部分解决。 目前我正在获得正确的输出,只是相反。
这是我实施的辅助功能:
char int2char (int radix, int value) {
char c = '?';
if ((value >= 0 && value < radix) && (radix <= 36 && radix >= 2)){
if (value < 10){
c = value + 48;
}
else if (value >= 10 && value < 36) {
c = value + 55;
}
}
return c;
}
到目前为止,我遇到困难的实际功能看起来像这样:
void int2str (int radix, int value) {
int result = value % radix;
int division = value / radix;
char c;
c = int2char(radix, result);
putchar(c);
while (division > 0) {
return int2str(radix, division);
}
}
第一个函数用于表示十六进制数字10-35。因此,如果模数产生11,例如,我应该输出'B'。
这很有效,除了倒退!我无法弄清楚如何扭转它。最大的障碍是你只能使用putchar()作为输出。没有字符串,没有数组。
进一步澄清,如果我输入:
int2str 16 60
输出应为'3C',而不是'C3'。
答案 0 :(得分:2)
首先,您对while
的使用令人困惑,因为其中有return
。将其替换为if
。 return
是不必要的,因为函数最后会自行返回。
完成后,您可以在递归调用后移动putchar
来反转输出:
if (division > 0) {
int2str(radix, division);
}
putchar(c);
作为旁注,return int2str(radix, division);
无论如何都没有意义,因为它是一个void
函数,所以没有什么可以返回的。如果 希望这样做(在这种情况下你不这样做),你会说:
somefunction();
return;
此外,如果您使用'0'
和'A'
代替48和55,则可能会更清楚:
if (value < 10){
c = value + '0';
}
else if (value >= 10 && value < 36) {
c = value - 10 + 'A';
}
答案 1 :(得分:1)
result
是最后一位数字,但您首先打印它。从递归调用中删除return
并将putchar
移至末尾。此外,while
循环应为if
。
void int2str(int radix, int value) {
int lastdigit = value % radix;
int firstdigits = value / radix;
if (firstdigits) {
int2str(radix, firstdigits);
}
putchar(int2char(radix, lastdigit));
}
答案 2 :(得分:0)
试试这个
c = int2char(radix, result);
if (division > 0)
int2str(radix, division);
putchar(c);
上次拨打int2str
会打印第一个数字,而第一个电话将打印最后一个数字。