[ create a new paste ] login | about

Link: http://codepad.org/0xhhJAOs    [ raw code | output | fork ]

C, pasted on May 13:
#include <stdio.h>
#include <stdarg.h>

void fputc10(FILE *fp, int d, int *n) {
  int c;
  c = d % 10;
  d /= 10;
  if (d > 0)
    fputc10(fp, d, n);
  fputc(c + '0', fp);
  (*n)++;
}

void task_percent(FILE *fp, char const **p, int *n, va_list *ap) {
  int d;
  (*p)++;
  switch (**p) {
  case 'd':
    d = va_arg(*ap, int);
    fputc10(fp, d, n);
    break;
  case '%':
    fputc('%', fp);
    (*n)++;
    break;
  default:
    break;
  }
}

int myvfprintf(FILE *fp, char const *form, va_list argp) {
  int n = 0;
  char const *p;
  for (p = form; *p; p++) {
    switch (*p) {
    case '%':
      task_percent(fp, &p, &n, &argp);
      break;
    default:
      fputc(*p, fp);
      n++;
    }
  }
  return n;
}

int myprintf(char const *form, ...) {
  int n;
  va_list argp;
  va_start(argp, form);
  n = myvfprintf(stdout, form, argp);
  va_end(argp);
  return n;
}  

int main() {
  int a = 10, b = 20, c = 30, n;
  n = myprintf("first: %d, second: %d, third: %d :", a, b, c);
  myprintf("n = %d\n", n);
  return 0;
}
/* end */


Output:
1
first: 10, second: 20, third: 30 :n = 34


Create a new paste based on this one


Comments: