#include <stdarg.h> #include <stdio.h>
/* * Conver int to string based on radix (usually 2, 8, 10, and 16) */ char *itoa(int num, char *str, int radix) { char string[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char* ptr = str; int i; int j;
while (num) { *ptr++ = string[num % radix]; num /= radix;
if (num < radix) { *ptr++ = string[num]; *ptr = '\0'; break; } }
j = ptr - str - 1;
for (i = 0; i < (ptr - str) / 2; i++) { int temp = str[i]; str[i] = str[j]; str[j--] = temp; }
return str; }
/* * A simple printf function. Only support the following format: * Code Format * %c character * %d signed integers * %i signed integers * %s a string of characters * %o octal * %x unsigned hexadecimal */ int my_printf( const char* format, ...) { va_list arg; int done = 0;
va_start (arg, format); //done = vfprintf (stdout, format, arg);
while( *format != '\0') { if( *format == '%') { if( *(format+1) == 'c' ) { char c = (char)va_arg(arg, int); putc(c, stdout); } else if( *(format+1) == 'd' || *(format+1) == 'i') { char store[20]; int i = va_arg(arg, int); char* str = store; itoa(i, store, 10); while( *str != '\0') putc(*str++, stdout); } else if( *(format+1) == 'o') { char store[20]; int i = va_arg(arg, int); char* str = store; itoa(i, store, 8); while( *str != '\0') putc(*str++, stdout); } else if( *(format+1) == 'x') { char store[20]; int i = va_arg(arg, int); char* str = store; itoa(i, store, 16); while( *str != '\0') putc(*str++, stdout); } else if( *(format+1) == 's' ) { char* str = va_arg(arg, char*); while( *str != '\0') putc(*str++, stdout); }
// Skip this two characters.
format += 2; } else { putc(*format++, stdout); } }
va_end (arg);
return done; }
int main(int argc, char* argv[]) { int n = 255; char str[] = "hello, world!";
printf("n = %d\n", n); printf("n = %i\n", n); printf("n = %o\n", n); printf("n = %x\n", n); printf("first char = %c\n", str[0]); printf("str = %s\n", str); printf("%s\tn = %d\n", str, n);
// Test my_printf function
printf("---------------my_printf--------------\n"); my_printf("n = %d\n", n); my_printf("n = %i\n", n); my_printf("n = %o\n", n); my_printf("n = %x\n", n); my_printf("first char = %c\n", str[0]); my_printf("str = %s\n", str); my_printf("%s\tn = %d\n", str, n);
return 0; }
|