Функция Scanf () со строками - PullRequest
0 голосов
/ 04 октября 2019

У меня есть следующая строка для чтения из функции scanf

1041657W 324944N Riverside

Если я вызываю scanf ():

    uint32_t N = 0;
    char Ch = 'z';
    char Name[100];
    scanf("%d %c %s", &N, &Ch, Name);

Значение переменныхбудет выглядеть следующим образом:

    N = 1041657
    Ch = 'W'
    Name = "324944N"

Я не уверен, как эти значения сканируются. Подскажите, пожалуйста, как каждая переменная отображает заданные значения?

1 Ответ

0 голосов
/ 04 октября 2019
[wally@localhost tmp]$ cat lat.c
#include <stdio.h>

int main (void)
{
    char    name [500], dir1, dir2;
    int lng, lat, sts;

    sts = sscanf ("1041657W 324944N Riverside", "%d%c %d%c %s",
                   &lng, &dir1, &lat, &dir2, name);
    printf ("status %d, %d%c %d%c %s\n", sts, lng, dir1, lat, dir2, name);
    return 0;
}

[wally@localhost tmp]$ gcc lat.c -o lat
[wally@localhost tmp]$ ./lat 
status 5, 1041657W 324944N Riverside

scanf () возвращает количество обработанных форматированных аргументов, поэтому пять означает, что все они были обработаны.

Обратите внимание, что для большинства географических вычислений DMS (градус, минуты, секунды) не особо удобно. Для преобразования в десятичные градусы минуты и секунды преобразуются в 1/60 и 1/3600 из десятичного значения, преобразованного в 1/100 и 1/10000.

...