#include <unistd.h>
void my_putchar(char c) {
write(1, &c, 1);
}
void my_puts(const char *str) {
while (*str) {
my_putchar(*str++);
}
}
void my_putnbr(int n) {
if (n < 0) {
my_putchar('-');
n = -n;
}
if (n / 10) {
my_putnbr(n / 10);
}
my_putchar(n % 10 + '0');
}
void my_printf(const char *format, ...) {
va_list args;
va_start(args, format);
while (*format) {
if (*format == '%') {
format++;
if (*format == 'd') {
int num = va_arg(args, int);
my_putnbr(num);
} else if (*format == 's') {
char *str = va_arg(args, char *);
my_puts(str);
} else {
my_putchar('%');
my_putchar(*format);
}
} else {
my_putchar(*format);
}
format++;
}
va_end(args);
}
int main() {
my_printf("Hello, %s! You have %d new messages.\n", "Alice", 5);
return 0;
}