Advertisement
toidi

Untitled

Dec 16th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <conio.h>
  5.  
  6. int number_size(int n)
  7. {
  8.     int i;
  9.     if (n < 0)
  10.         n = -n;
  11.     while (n > 0) {
  12.         n = n/10;
  13.         i++;
  14.     }
  15.     return i;
  16. }
  17.  
  18. void my_snprintf(char *buffer, size_t count, const char *format, ...)
  19. {
  20.     int quantity = 0;
  21.     for (int i = 0; format[i] != '\0'; i++)
  22.         if (format[i] == '%')
  23.             quantity++;
  24.  
  25.     va_list vl;
  26.     va_start(vl, format);
  27.  
  28.     int j = 0;
  29.     int k = 0;
  30.     for (j; j < count; j++)
  31.     {
  32.         if (format[j] == '%')
  33.         {
  34.             j++;
  35.             if (format[j] == 'd')
  36.             {
  37.                 int num = va_arg(vl, int);
  38.                 int numberSize = number_size(num);
  39.                 while (numberSize > 0)
  40.                 {
  41.                     int i = numberSize - 1;
  42.                     int pw = 1;
  43.                     while (i > 0)
  44.                     {
  45.                         pw = pw * 10;
  46.                         i--;
  47.                     }
  48.                     buffer[k] = (((num / pw)%10) + '0');
  49.                     //printf("%d", (num / pw)%10);
  50.                     numberSize--;
  51.                     k++;
  52.                 }
  53.             }
  54.             else if (format[j] == 'c')
  55.             {
  56.                 char name = va_arg(vl, int);
  57.                 buffer[k] = name;
  58.                 k++;
  59.             }
  60.         }
  61.         else
  62.         {
  63.             buffer[k] = format[j];
  64.             k++;
  65.         }
  66.        
  67.     }
  68.        
  69.     va_end(vl);
  70. }
  71.  
  72. void main()
  73. {
  74.     char buffer [100];
  75.     my_snprintf(buffer, 100, "Radiohead released %d albums with more than %d songs%c", 9, 200, '.');
  76.     puts(buffer);
  77.     getch();
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement