Печать номера без использования * printf - PullRequest
7 голосов
/ 03 апреля 2011

Можно ли напечатать (в stdout или в файл) число (int, float, double, long и т. Д.) Без использования какой-либо из функций *printf (printf, fprintf, sprintf, snprintf, vsprintf,…)?

Ответы [ 5 ]

7 голосов
/ 03 апреля 2011

Если ваш libc содержит функцию itoa(), вы можете использовать ее для преобразования целого числа в строку.
В противном случае вам придется написать код для преобразования числа в строку самостоятельно.1004 *itoa() реализация из языка программирования C, 2-е издание - Керниган и Ричи стр. 64:

/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
   int i, sign;

   if ((sign = n) < 0)  /* record sign */
      n = -n;           /* make n positive */
   i = 0;
   do {  /* generate digits in reverse order */
      s[i++] = n % 10 + '0';  /* get next digit */
   } while ((n /= 10) > 0);   /* delete it */
   if (sign < 0)
      s[i++] = '-';
   s[i] = '\0';
   reverse(s);
}
3 голосов
/ 03 апреля 2011

Ну, это не сложно сделать для целых чисел, но задание немного сложнее для чисел с плавающей запятой, и кто-то уже опубликовал указатель на объяснение этого.Для целых чисел вы можете сделать что-то вроде этого:

void iprint(int n)
  { 
    if( n > 9 )
      { int a = n / 10;

        n -= 10 * a;
        iprint(a);
      }
    putchar('0'+n);
  }
2 голосов
/ 21 августа 2015

это приведет к правильному порядку:

void print_int(int num){
    int a = num;

    if (num < 0)
    {
       putc('-');
       num = -num;
    }

    if (num > 9) print_int(num/10);

    putc('0'+ (a%10));
 }
2 голосов
/ 03 апреля 2011

Просто используйте функцию write () и отформатируйте вывод самостоятельно.

0 голосов
/ 19 мая 2011

Я предполагаю, что большинство людей сталкиваются с этим вопросом, потому что они написали свои собственные последовательные функции передачи и должны напечатать некоторые числа. Вам нужно будет изменить вызов putc в соответствии с вашими настройками.

void print_int(int num)
{
    if (num < 0)
    {
        putc('-');
        num = -num;
    }
    else if (num == 0)
    {
        putc('0');
        return;
    }   
    while (num != 0)
    {
        putc ('0'+ (num%10));
        num /= 10;
    }
}

Это напечатает номер в обратном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...