matlab类似于printf的语句,VC++6.0上写了个printf类似的程序,欢迎提出改进方法.

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

VC++6.0上写了个printf类似的程序,欢迎提出改进方法.

#include

#include

#include

#ifndef NULL

#define NULL  (void *)0           /*  NULL    :   Null pointer */

#endif

#define putc_to_file(_c,_stream)  (--(_stream)->_cnt >= 0 ?\

0xff & (*(_stream)->_ptr++ = (char)(_c)) :  _flsbuf((_c),(_stream)))

void outputch(char ch)

{

putc_to_file(ch, stdout);

#if 0

(*(volatile unsigned short *)(0x80130000)) = (unsigned short)ch;

#endif

}

void outputstr(char *str)

{

puts(str);

}

void print_x(long l)

{

unsigned long  t;

signed long i, k ;

signed char buf[8];

if (l == 0)

{

outputch('0');

return;

}

memset(buf,'0',8);

t = l;

k = 7;

for(;;)

{

if (t > 15)

{

i = t % 16;

}else

i = t;

if (i < 10){

buf[k--] = i + '0';

}

else

if(i < 16)

{

buf[k--] = i -10 +'a';

}

if (t < 15)

break;

t >>= 4;

}

for(i =0 ;i < 8 ; i ++)

outputch(buf[i]);

}

void print_0nx(char ch2, long l)

{

unsigned char ch;

int i;

ch2 = ch2 - '0';

for (i = ch2 - 1; i >= 0; i--) {

ch = (l >> (i * 4)) & 0x0f;

if (ch < 10)

outputch((char)(ch + '0'));

else

outputch((char)(ch - 10 + 'a'));

}

}

void print_d(long l)

{

unsigned long  t;

int i, j, k ;

char buf[8];

if (l == 0)

{

outputch('0');

return;

}

memset(buf,'0',8);

t = l;

k = 7;

for(;;)

{

if (t > 9)

{

i = t % 10;

}else

i = t;

if (i < 10){

buf[k--] = i + '0';

}

if (t < 9)

break;

t /= 10;

}

j = 0;

for(i =0 ;i < 8 ; i ++)

{

if(buf[i] != '0')

j = 1;

if (j)

outputch(buf[i]);

}

}

int print_u(char *s, ...)

{

va_list ap;

unsigned long arg;

char *str;

char ch1, ch2, ch3;

va_start(ap, s);

while (*s != 0) {

if (*s == '%') {

s++;

ch1 = *s++;

if (ch1 == 's') {

str = va_arg(ap, char *);

outputstr(str);

}else if (ch1 == 'd') {

arg = va_arg(ap, long);

print_d(arg);

}

else if (ch1 == 'x') {

arg = va_arg(ap, long);

print_x(arg);

}else {

ch2 = *s++;

ch3 = *s++;

arg = va_arg(ap, long);

print_0nx(ch2, arg);

}

} else

outputch(*s++);

}

va_end(ap);

return 0;

}

int debug_printf(char *s, ...)

{

va_list ap;

unsigned long arg;

char *str;

char ch1, ch2, ch3;

va_start(ap, s);

while (*s != 0) {

if (*s == '%') {

s++;

ch1 = *s++;

if (ch1 == 's') {

str = va_arg(ap, char *);

print_u(str);

}else if (ch1 == 'd') {

arg = va_arg(ap, long);

print_d(arg);

}

else if (ch1 == 'x') {

arg = va_arg(ap, long);

print_x(arg);

}else {

ch2 = *s++;

ch3 = *s++;

arg = va_arg(ap, long);

print_0nx(ch2, arg);

}

} else

outputch(*s++);

}

va_end(ap);

return 0;

}

void main(void)

{

debug_printf("This is a printf test func, %s, %d \n", __FILE__, __LINE__);

debug_printf("*************AUTHOR :Young ************\n");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值