簡體   English   中英

在沒有Printf或任何函數的情況下在C中打印int

[英]Print an int in C without Printf or any functions

我有一個分配,我需要在不使用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);
}

而不是在循環中調用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;
}

一種選擇可能是遞歸地執行此操作,因此數字以正確的順序打印出來。

在這種情況下,而不是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;
}

您可以將int轉換為char *,char *並顯示此char *:

char        *put_int(int nb)
{
 char       *str;

 str = malloc(sizeof(char) * 4);
 if (str == NULL)
   return (0);
 str[0] = (nb / 100) + '0';
 str[1] = ((nb - ((nb / 100 * 100 )) / 10) + '0');
 str[2] = ((nb % 10) + '0');
 return (str);
}

void        put_str(char *str)
{
 while (*str)
   write(1, str++,1);
}

int main(void)
{
 put_str(put_int(42));
 return (0);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM