c - 将整数打印为字符数字(无数组/printf/等...)

标签 c integer character

我试图在 C 中将整数打印到控制台,但有一些限制,其中最重要的是我只能将单个字符写入控制台,如下所示:

void my_char(char ch)
}
    write(1, &ch, 1);
}

其他约束包括没有预定义方法(printf、log 等)。没有递归。最后,我可能不会创建数组。

到目前为止,我已经想出了一种可以完美地打印出数字的方法......向后。

int main()
{
    int i = -345320;
    my_int(i);
    return 0;
}

void my_int(int x)
{
    char *a;
    int n;

    if(x < 0)
    {
            x = x * -1;
            my_char('-');
    }

    while(x)
    {
            n = x % 10;
            a = (char*)&n;
            my_char(*a + 48);
            x /= 10;
    }
}

有没有其他好的方法来解决这个问题,或者我至少在朝着正确的方向前进?理想情况下,我想扩展它以在我提供的任何基数中打印一个整数,但我需要从这里开始。

我正在尝试在整数的每个字节上迭代一个指针,但我无法理解如何使用这些字符值来重新创建整数。

欢迎任何建议。我宁愿获得一些见解,而不仅仅是代码解决方案。我也很乐意就让它变得更精益发表意见。

最佳答案

这是一个遵循您的约束的通用(丑陋!)解决方案。它使用了我在上面评论中给出的想法。它假定为 32 位整数。

void my_int(int x) {
    int n = 1000000000;
    if (x == 0) {
        my_char('0');
        return;
    }
    if (x == INT_MIN) { // INT_MIN is in limits.h
        my_char('-'); my_char('2'); my_char('1');
        my_char('4'); my_char('7'); my_char('4');
        my_char('8'); my_char('3'); my_char('6');
        my_char('4'); my_char('8');
        return;
    }
    if (x < 0) {
        x *= -1;
        my_char('-');
    }
    while (n > x) n /= 10;
    while (n != 0) {
        my_char(x / n % 10 + '0');
        n /= 10;
    }
}

关于c - 将整数打印为字符数字(无数组/printf/等...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21447366/

相关文章:

从 C 中的函数捕获结果 (cmd1 | cmd2)

javascript - 正则表达式使用javascript为每个字符匹配不同的集合

input - 将字符输入限制为特定字符

c - 如何返回字符指针?

r - 从范围中提取整数

c - 整数变量中总是垃圾

c - else if 语法错误?谁能帮忙找一下

c++ - 计算 Linux 上一组进程使用的内存

c - 在 C 中,是否有必要在退出时释放指针?

c# - 如何操作整数值的特定数字?