在C中右对齐十进制字符串

时间:2016-03-22 07:45:22

标签: c

我有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是否会导致问题。

1 个答案:

答案 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)