我试图在 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/