【发布时间】:2014-01-30 03:39:20
【问题描述】:
我正在尝试将整数打印到 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;
}
}
还有其他好的方法可以解决这个问题,还是我至少朝着正确的方向前进?理想情况下,我想扩展它以在我提供的任何基数中打印一个整数,但我需要从这里开始。
我正在玩在整数的每个字节上迭代一个指针,但我无法理解如何使用这些字符值来重新创建整数。
感谢任何建议。我宁愿获得一些见解,而不仅仅是代码解决方案。我也希望能提供更精简的意见。
【问题讨论】:
-
尝试递归,并在递归步骤之后打印数字。
-
我的错;我也在避免递归。更新以提及这一点。
-
为了让它更精简,你可以去掉 n 和 a,只在 while 循环中使用这一行
my_char(x % 10 + '0');。 -
您的代码不仅向后打印数字,而且不适用于 0 或 INT_MIN。 (在二进制补码机器上没有 INT_MIN 的正数版本。)
-
这是一个想法。尝试使用以十亿开头的变量(假设为 32 位整数)。用它来挑选从最重要的数字开始。