在保持正确对齐的同时消除前导零

时间:2019-04-29 12:21:08

标签: c printf

我希望能够从数字0-9的输出中删除前导零,但是在仍然保持对齐的情况下,如果数字有2位数字,我将拥有该对齐方式。
假设我的经度为dms格式:1134510W

我想添加另一个坐标,例如:1450309N
我将如何使其符合以下格式:

113d 45m 10d West  
145d  3m  9d North

我正在使用fscanf(buf, "%3s%2s%2s%s",d,m,s,c)进行阅读,
 sprintf(buf, "%3sd %2sm %2ss %4s",d,m,s,c)进行存储。我尝试将sprintf的m和s宽度指定符更改为1,但是它没有正确对齐。

1 个答案:

答案 0 :(得分:1)

怎么样?

#include <stdio.h>

char* trim(char* c)
{
    while (*c=='0') c++;
    return c;
}

int main(void) {
    char* d="113";
    char* m="45";
    char* s="10";
    char* c= "West";
    printf("%3sd %2sm %2ss %4s\n",d,m,s,c);

    d="145";
    m="03";
    s="09";
    c= "North";
    printf("%3sd %2sm %2ss %4s",trim(d),trim(m),trim(s),c);
    return 0;
}

不带有trim函数的输出:

Success #stdin #stdout 0s 9424KB
113d 45m 10s West
145d 03m 09s North

使用trim函数的输出:

Success #stdin #stdout 0s 9424KB
113d 45m 10s West
145d  3m  9s North
相关问题