#include #include #include "printf.h" /* * my_printf("str: %s\nchr: %c\nhex: %x\nint: %d\noct: %o", 1, 1, 1, 1, 1); */ int main() { my_printf("str: %s\nchr: %c\nhex: %x\nint: %d\noct: %o", "hi", 'a', 0x32, 10, 8); return 0; } void my_printf(char *format, ...) { char *c; // a char in the `format` string va_list args; va_start(args, format); for (c = format; *c != '\0'; c++) { while (*c != '%') { putchar(*c); c++; } c++; switch(*c) { case 'c': { putchar(va_arg(args, int)); putchar('\n'); break; } case 'd': { puts(convert(va_arg(args, int), 10)); break; } case 'o': { puts(convert(va_arg(args, unsigned int), 8)); break; } case 'x': { puts(convert(va_arg(args, unsigned int), 16)); break; } case 's': { puts(va_arg(args, char*)); break; } } } va_end(args); } char* convert(unsigned int num, int base) { static char rep[]= "0123456789ABCDEF"; static char buffer[50]; char *ptr; ptr = &buffer[49]; *ptr = '\0'; do { *--ptr = rep[num%base]; num /= base; } while (num != 0); return(ptr); }