源代码:
#include <windows.h>
#include <string.h>
#include <stdio.h>
#define ABS(x) (x < 0 ? x * -1 : x)
int Printf(char *fmt,...){
FILE *fp = fopen("temp.txt","w+");
int len,n,num=0; va_list ap;
char buf[1024] = {0};
char tem[1024] = {0};
char *p1,*p2,*p3,ch;
va_start(ap,fmt);
strcpy(buf,fmt);
fputs(fmt,fp);
rewind(fp);
p1 = buf;
while((ch = fgetc(fp))!=EOF){
if(ch == '%'){
fscanf(fp,"%d",&num);
switch(ch = fgetc(fp)){
case 'S':
case 's':
p2 = va_arg(ap,char*);
break;
case 'C': ch = 'c';
case 'c': break;
case 'D':
case 'd':
p2 = tem;
n = va_arg(ap,int);
itoa(n,tem,10);
break;
default : return 0;
}
len = ch == 'c' ? 1 : strlen(p2);
if(num > 0 && ABS(num) - len > 0){
num = num - len;
for(;num;num--) *p1++ = ' ';
}
if(ch == 'c') *p1++ = va_arg(ap,int);
else while(*p2) *p1++ = *p2++;
if(num < 0 && ABS(num) - len > 0){
num = num + len;
for(;num;num++) *p1++ = ' ';
}
}else{
*p1++ = ch;
}
}
*p1 = '\0';
fclose(fp);
remove("temp.txt");
puts(buf);
return 1;
}
int main(){
Printf("姓名:%-6s 性别:%-5c 年龄:%-5d岁。","小明",'G',24);
Printf("姓名:%6s 性别:%5c 年龄:%5d岁。","小明",'G',24);
return 0;
}
执行结果: