我有2个十进制字符串,只有2个小数点。这些字符串是一个接一个地打印出来的。我需要一种方法来正确对齐这些字符串,使这些字符串正确对齐。就像这个
256.60
59.00
char max[20]="";
char cmax[20]="";
strcat(max,"STB Amount: ");
strcat(max,stbamount);
strcat(cmax,"PKG Amount: ");
strcat(cmax,pkgamount);
//strcat(cmax,".00");
prn_write_text(max,strlen(max),1);
prn_write_text(cmax,strlen(cmax),1);
此处prn_write_text
是使用热敏打印机的API调用.24是本文的中心点。我尝试添加一些空格(请参阅下面的代码),它不会工作。
int yyer=24+(24-strlen(stbamount));
int c=0;
for (c=0;c<yyer;yyer++)
{
strcat(max," ");
}
请指教。
更新:
3.3.1.6 int prn_write_text(unsigned char * text2,int len,int font)
此API函数用于打印文本。
参数
text2,:描述:指向要从中打印文本的缓冲区的指针。类型:INPUT
len,:描述:文本的长度。类型:INPUT
font,:说明:目前文本的字体有两种字体
支持。(1和2字体)。
输入:INPUT
更新:
我尝试增加缓冲区大小,仍然在这些值的情况下,最后一个零被截止
char amount1[10]="";
char amount2[10]="";
char dummyamount[20]="";
float bamt1,bamt2,amt1,amt2;
float balance1,balance2;
char sbal[20]="";
char pbal[20]="";
char x1 = balance1;
char x2 = balance2;
int tmp1 = balance1 * 100;
balance1 = tmp1 / 100.0;
int tmp2 = balance2 * 100;
balance2 = tmp2 / 100.0;
char buf1[25]="";
char buf2[25]="";
snprintf(buf1, sizeof buf1, "%.2f", balance1);
printf("\nbuffer1 ---------->%f\n",buf1);
snprintf(buf2, sizeof buf2, "%.2f", balance2);
printf("\nbuffer2 ---------->%f\n",buf2);
memset(max,0,sizeof(max));
memset(cmax,0,sizeof(cmax));
snprintf(max, 20,"STB Balance:%8s", buf1);
snprintf(cmax, 20,"PKG Balance:%8s", buf2);
prn_write_text(max,strlen(max),1);
prn_write_text(cmax,strlen(cmax),1);
如果-2003.30
之类的值只获得-2003.0
。我不知道上面的切割逻辑或snprintf
是否会导致问题。
答案 0 :(得分:0)
@ gsamaras的回答是要走的路。好吧,当他应该使用printf
时,他直接使用了snprintf
,但是给出它的唯一元素已经是一个不错的猜测。
如果要输出许多字符串,您甚至可以重用缓冲区:
char max[20]="";
snprintf(max, 20, "STB Amount:%8s", stbamount);
prn_write_text(max,strlen(max),1);
snprintf(max, 20, "PKG Amount:%8s", pkgamount);
prn_write_text(max,strlen(max),1);
假设您要打印的长度超过8个字符,例如16个。您必须增加缓冲区大小以及打印宽度:
char max[28]="";
snprintf(max, 28, "STB Amount:%16s", stbamount);
prn_write_text(max,strlen(max),1);
...
这里的规则是:缓冲区的大小(28)=修复部分的大小(11)+ var的大小(16)+ 1(终止NULL)