Creating your own printf() in C

  • Thread starter Tony11235
  • Start date
  • #1
254
0

Main Question or Discussion Point

Given this code, I was to finish it by creating the printint(), printstring(), and printhex() functions. I wasn't able to finish the printhex(). And the printint() might not even be right. I know java, but I'm fairly new to C. Could anyone show me what the printhex() should be?

#include <stdarg.h>

extern int printchar(int);

void myprintf(const char *fmt, ...);
{
const char *p;
va_list argp;
int i;
char *s;
char fmtbuf[256];

va_start(argp, fmt);

for(p + fmt; *p != '\0'; p++)
{
if(*p != '%')
{
putchar(*p);
continue;
}

switch(*++p)
{
case 'c':
i = va_arg(argp, int);
putchar(i);
break;

case 'd':
i = va_arg(argp, int);
printint(i);
break;

case 's':
s = va_arg(argp, char *);
printstring(s);
break;

case 'x':
i = va_arg(argp, int);
printhex(i);
break;

case '%':
putchar('%');
break;
}
}

va_end(argp);
}

void printint(int i)
{
int digit;
digit = i % 10;
digit = digit + '0';
i = i / 10;
putchar(i);
}

void printstring(char s)
{
putchar(s);
}

void printhex(int i)
{
}
 

Answers and Replies

  • #2
dduardo
Staff Emeritus
1,898
3
Last edited:
  • #3
254
0
dduardo said:
Why are you creating your own printf function? Don't try to reinvent the wheel.

For the hex you'll basically want to do this:

for (int a=2*sizeof(int) - 1; a>=0; a--) {
putchar("0123456789ABCDEF"[((i >> a*4) & 0xF)]);
}

[edit] Look at a printf source if you like:

http://cvs.opensolaris.org/source/xref/usr/src/uts/common/os/printf.c
The standard c libraries require memory that msp430, the processor for this little toyish robot were going to be programming in lab, does not have. So I guess our professor is just having us practice writing library routines.
 

Related Threads for: Creating your own printf() in C

  • Last Post
Replies
2
Views
2K
  • Last Post
Replies
11
Views
6K
  • Last Post
Replies
4
Views
2K
  • Last Post
Replies
7
Views
2K
  • Last Post
Replies
2
Views
11K
Replies
3
Views
1K
  • Last Post
Replies
9
Views
2K
Top