我有一个分配,我需要在不使用printf,putchar等的情况下在C中打印整数。不允许包含头文件。除了我写的任何东西,没有函数调用。我有一个函数my_char我正在使用(也许是错误的)但它打印出一个字符。我目前有以下代码向后打印数字。不寻找答案。只是寻找一些方向,一些帮助,也许我正在看它完全错误。
void my_int(int num)
{
unsigned int i;
unsigned int j;
char c;
if (num < 0)
{
my_char('-');
num = -num;
}
do
{
j = num % 10;
c = j + '0';
my_char(c);
num = num/10;
}while(num >0);
}
答案 0 :(得分:5)
而不是在循环中调用my_char()而不是将字符“打印”到缓冲区,然后反向循环缓冲区以将其打印出来。
原来你不能使用数组。在这种情况下,您可以通过循环计算出10的最大功率(即log10)。然后使用它从第一个数字开始向后工作。
unsigned int findMaxPowOf10(unsigned int num) {
unsigned int rval = 1;
while(num) {
rval *= 10;
num /= 10;
}
return rval;
}
unsigned int pow10 = findMaxPowOf10(num);
while(pow10) {
unsigned int digit = num / pow10;
my_char(digit + '0');
num -= digit * pow10;
pow10 /= 10;
}
答案 1 :(得分:2)
一个选项可能是以递归方式执行此操作,因此数字会以正确的顺序打印出来。
在这种情况下,不是do / while循环,而是有一个更像这样的结构,基本情况为num = 0。
if(num==0)
return;
j = num % 10;
c = j + '0';
my_int(num/10);
my_char(c);
编辑:注意到您不允许使用递归。它有点难看,但你可以检查数字中的数字,然后在数字后面循环。
要查找位数,
int digitDivide = 1;
int tempNum = num;
while(tempNum>0){
tempNum= tempNum/10;
digitDivide=digitDivide*10;
}
然后使用它循环遍历数字,如下所示:
digitDivide = digitDivide/10;
while(digitDivide>0){
tempNum = (num/digitDivide)%10;
c = j + '0';
my_char(c);
digitDivide=digitDivide/10;
}
答案 2 :(得分:0)
您可以将int转换为char *,char *并显示此char *:
$tenant_id = session()->get('tenant');
\Config::set('database.connections.mysql_tenant.database', $dbname);
\DB::setDefaultConnection('mysql_tenant');