dongfang 发表于 4 天前

如何解决sprintf语句转换字符前面有一个空格

我在用sprintf语句转换时输出的字符显示时总是有一位空格,使得本来三位数字,但必须使用4位来显示,前面总是有个空格,请教高手如何去掉前面的空格?

_奶咖君_ 发表于 4 天前

你程序怎么写的呢?

ercircle 发表于 4 天前

你程序怎么写的呢?


dongfang 发表于 4 天前

ercircle 发表于 2025-11-3 17:58
你程序怎么写的呢?

char S;                                       //显示缓存
u8 bmq,bmq1,S1;

if(bmq1!=bmq)
{
   bmq1=bmq;
sprintf(S,"%4d",bmq);
LCD_A24(100,30,S,15,0,4);   //显示12*24字符串       
}

/*===================================================================================================
** 在单色LCD液晶显示屏显示24*16点阵数字串函数
** 调用参数: X列Y行坐标, * str串指针, Fcolor字前景色,Bcolor字背景色,约定:色号80为透明,Len指定长度
=====================================================================================================*/
void LCD_A24(u16 X,u16 Y, char *str,u8 Fcolor,u8 Bcolor,u8 Len)
{/* X(0-319) Y(0-479) */
unsigned char n,C;
unsigned int i,j,L,Lw=0,ZM;
L=Len;                           //strlen(str);
for(j=0;j<L;j++)
{ C=str;                        /* 逐个显示字符串 */
    for(i=0;i<24;i++)
    { /* 写24行 */
      ZM=ASC24;         /* 取字模码1 */
      ZM=ZM*256+ASC24;/* 取字模码2 */
      LCD_MoveTo(X+Lw,Y+i);          /* 定位左上角 */
      for(n=0;n<12;n++)
      { if((ZM&0x8000)==0x8000)LCD_DATA(COLOR);/* 字模点为1显示前景色 */
      else                                           /* 字模点为0显示原底色或背景色 */
      { if(Bcolor==80) { LCD_MoveTo(X+Lw+n,Y+i); }   /* 透明显示模式: 仅地址+1定位 */
         else LCD_DATA(COLOR);               /* 正常显示模式:背景色 */
      }
      ZM = ZM << 1;
      }         /* 水平16点显示完毕 */
    } Lw=Lw+12; /* 水平坐标位移 */
}             /* 一位数字显示完毕*/
}

LCD_A24这个函数最后的数字3既显示三位时,显示出来是“空格+百位+十位”个位就显示不出来

ercircle 发表于 4 天前

dongfang 发表于 2025-11-3 18:26
char S;                                       //显示缓存
u8 bmq,bmq1,S1;



显示三位sprintf(S,"%4d",bmq);

为什么要用4d呢?自动添加了空格补齐四位,如不需要占位符直接%d

dongfang 发表于 4 天前

ercircle 发表于 2025-11-3 18:47
显示三位sprintf(S,"%4d",bmq);

为什么要用4d呢?自动添加了空格补齐四位,如不需要占位符直接%d


非常谢谢,我忽略了,
页: [1]
查看完整版本: 如何解决sprintf语句转换字符前面有一个空格