【发布时间】:2016-03-22 07:45:22
【问题描述】:
我有 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,: 描述:指向要打印的文本的缓冲区的指针。类型:输入
len,: 描述:文本的长度。类型:输入
font,: 说明:文字的字体 目前有两种字体
支持。(1 和 2 种字体)。
类型:输入
更新:
我尝试增加缓冲区大小,但在这些值的情况下,最后一个零被截断
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 是否会导致问题。
【问题讨论】:
-
通过
printf()使用可选的最小字段宽度。 -
这完全取决于
prn_write_text的具体实现方式,最小宽度等等。不知道有什么可能,我们无法为您提供帮助。 -
不是特定于 C 的,也不是优雅的 .. 但我所做的是创建一个 MAX 字符字符串(在本例中为 10 个)并填充我的“填充”字符。我将使用“0”进行演示,因为它比空格更容易看到:“0000000000”,然后我添加我想要右对齐的字符串“0000000000”+“59.00”。然后我取我的 MAX 字符的右手子字符串:“0000059.00”.. 使用空格而不是零(正如我所说,不优雅但在任何地方都可以使用,只要你可以添加和子串字符串)
-
示例只打印2个十进制数字,代码示例完全不相关,您没有说
prn_write_text如何使用...对不起,这个问题不清楚 -
@SouravGhosh 请查看更新。我该怎么做?
标签: c