c - 递归数函数返回意外值

标签 c string recursion int

<分区>

在广泛搜索可将整数转换为视觉上等效的字符串但一无所获后,我决定自己编写一个函数。

“ascii”函数接受三个参数:要转换的整数、保存转换后的整数的字符串和一个要保留为 0 的计数器。

void ascii(int c, char str[], int k) {
    if (c <= 9) {
        str[k] = c + '0';
    }

    else if (c >= 10) {
        str[k] = c / 10 + '0';
        ascii(c % 10, str, k + 1);
    }
}

用个位数测试这个函数没有什么意外,但在更大的数字上,事情开始变得困惑。 76 变成“761”,765 变成“|51”,7658 变成“-81”。数字包含的数字越多,我对结果字符串的理解就越少。给了什么?

最佳答案

我认为这是问题所在:

else if (c >= 10) {
    str[k] = c % 10 + 48;
    ascii(c / 10, str, k + 1);
}

算术运算被反转。生成的数组之后必须反转(来自不同的函数,调用问题中的函数作为助手),并且它必须以 '\0' 字符结尾。

或者,您可以将结果以相反的顺序复制到输出数组中,但前提是您事先知道位数。

关于c - 递归数函数返回意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035375/

相关文章:

c - 我的链表程序出了什么问题? (分段故障)

使用 char 数组检查用户在 C 中是否输入空字符串

php - 值未分配给变量

PHP 递归中断

元组的 SQL 重复数据删除列表

c - 创建和迭代链表时出现问题?

c++ - libpcap:接收帧和调用回调函数之间的延迟

c - 字符串文字/转义

c - 为什么这两个函数的结果不同?

java - 使用 While 循环将键盘上的用户输入与字符串进行比较