putchar()可以打印整数吗?
如何仅借助putchar()可以打印整数吗?,c,file-io,integer,output,putchar,C,File Io,Integer,Output,Putchar,如何仅借助putchar()打印整数。我想在不使用外部存储的情况下执行此操作。 这个问题是在去年的一次采访中提出的。考虑使用itoa函数(您需要导入其库),然后在它生成的cstring中循环每个字符(使用strlen获取循环的上限),然后在每个字符上简单地使用putchar()。考虑使用itoa函数(你需要导入它的库),然后在它生成的cstring中循环每个字符(使用strlen获得循环的上限),然后在每个字符上简单地使用putchar()。当面对面试中模糊的要求时,最好表达你的假设 我认为关于
putchar()
打印整数。我想在不使用外部存储的情况下执行此操作。这个问题是在去年的一次采访中提出的。考虑使用itoa函数(您需要导入其库),然后在它生成的cstring中循环每个字符(使用strlen获取循环的上限),然后在每个字符上简单地使用putchar()。考虑使用itoa函数(你需要导入它的库),然后在它生成的cstring中循环每个字符(使用strlen获得循环的上限),然后在每个字符上简单地使用putchar()。当面对面试中模糊的要求时,最好表达你的假设 我认为关于只能使用
putchar
的要求意味着这是我唯一可以调用的库函数。此外,我还假设“无外部存储”意味着我无法明确创建缓冲区。如果面试官同意我的假设,我将继续:
void pr_int(int n) {
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10 != 0)
pr_int(n / 10);
putchar((n % 10) + '0');
}
当面对面试中含糊不清的要求时,表达你的假设是个好主意 我认为关于只能使用
putchar
的要求意味着这是我唯一可以调用的库函数。此外,我还假设“无外部存储”意味着我无法明确创建缓冲区。如果面试官同意我的假设,我将继续:
void pr_int(int n) {
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10 != 0)
pr_int(n / 10);
putchar((n % 10) + '0');
}
已经有一个类似的问题了,我回答了 将其转换为仅使用putchar的程序应该很容易(例如,执行以下操作:
while(buf[i])
putc(buf[i++]);
putc('\n');
已经有一个类似的问题了,我回答了 将其转换为仅使用putchar的程序应该很容易(例如,执行以下操作:
while(buf[i])
putc(buf[i++]);
putc('\n');
我刚刚组装了一些可怕的东西。它主要是概念证明,它真的很可怕,只适用于正整数,但几乎不使用任何存储。啊,整数不能太大,它可能有缺陷
#include <stdio.h>
#include <assert.h>
int main()
{
const int max_precision = 100000;
int b = 7414;
int max = b * max_precision;
assert(b > 0);
while (b <= max && b >= 0)
{
putchar('0' + (b / max_precision) % 10);
b *= 10;
}
putchar('\n');
}
#包括
#包括
int main()
{
const int max_精度=100000;
int b=7414;
int max=b*max\u精度;
断言(b>0);
while(b=0)
{
putchar('0'+(b/max_精度)%10);
b*=10;
}
putchar('\n');
}
max\u precision
设置将打印多少位。b
存储实际数字,max
用于终止循环(该循环或整数溢出).我刚刚组装了一些可怕的东西。它主要是概念证明,非常可怕,只适用于正整数,但几乎不使用任何存储。啊,整数不能太大,也可能有问题
#include <stdio.h>
#include <assert.h>
int main()
{
const int max_precision = 100000;
int b = 7414;
int max = b * max_precision;
assert(b > 0);
while (b <= max && b >= 0)
{
putchar('0' + (b / max_precision) % 10);
b *= 10;
}
putchar('\n');
}
#包括
#包括
int main()
{
const int max_精度=100000;
int b=7414;
int max=b*max\u精度;
断言(b>0);
while(b=0)
{
putchar('0'+(b/max_精度)%10);
b*=10;
}
putchar('\n');
}
max\u precision
设置将打印多少位。b
存储实际数字,max
用于终止循环(该循环或整数溢出)。正确回答此问题主要取决于“外部存储”和“putchar
仅”的含义
解决方案现在符合所有ISO C标准。详细信息可以找到。正确回答这个问题很大程度上取决于“外部存储”和“
putchar
仅”的含义
该解决方案现在符合所有ISO C标准。可以找到详细信息。它们是指仅用于输出或任何外部库引用的“putchar”吗?我假设是前者。可以认为
itoa
使用外部内存“外部存储”但是?他是说什么都不能存储在ram中吗?而且itoa
甚至不是一个标准函数……我从来没有说过它是。事实上我说过,“你需要导入它的库”。它们是指“putchar”吗仅用于输出或任何外部库参考?我假设为前者。可以认为,itoa
使用外部内存“外部存储”?他是说什么都不能存储在ram中?而且itoa
甚至不是一个标准函数…我从来没有说过。事实上我说过,“您需要导入它的库”。n=-n
将在INT_MIN时失败。+1@H2CO3:但是n=-n;
可能会失败。C标准允许未失败的实现:-)n=-n
将在INT_MIN时失败。+1@H2CO3:但是n=-n;
可能会失败。C标准允许未失败的实现:-)顺便说一句,这位面试官认为你在准备2013年的IOCCC吗?你说的“不使用外部存储”是什么意思?@MichaelBurr我认为面试官的意思是不使用变量,顺便问一下,这位面试官认为你在准备2013年的IOCCC吗?你说的“不使用外部存储”是什么意思“?@MichaelBurr我想面试官的意思是不使用变量,我也很困惑