Устранение ведущего нуля при сохранении правильного выравнивания - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу иметь возможность удалить начальный ноль из выходных данных для чисел 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 Ответ

1 голос
/ 29 апреля 2019

Как насчет этого?

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...