strtok с чтением строк из файла C - PullRequest
0 голосов
/ 17 июня 2020

Чтение городов и их координат из файла и вычисление их расстояния до точки (lat1; lat2) Я объединил fgets с strtok следующим образом:

const char sep[]=";";
char data[99];
char *token;
int a=0;
double x1,x2,y1,y2,xx,yy,d;

FILE * f=fopen("miasta.txt", "r");
while(fgets(data,sizeof(data),f))
{
    token=strtok(data,sep);
    while(token!=NULL)
    {
        switch (a) {
            case 0: printf(token); break;
            case 1: x1=atoi(token); break;
            case 2: x2=atoi(token); break;
            case 3: y1=atoi(token); break;
            case 4: y2=atoi(token); break;
            }

        if (a==4) {

            xx=x1+(x2/60);
            yy=y1+(y2/60);
            d=distance(lat1,lat2,xx,yy);

            printf(": %fkm\n",d);
            a=0;

        } else a++;

    token=strtok(NULL,sep);
    }

}
fclose(f);

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

Adamow(siedleckie): 309.497030km

: 4938.205291km
36: 3837.944678km
50: 5444.875905km
59: 5706.694715km
18: 2604.334104km
Aleksandrow Lodzki: 17.040912km

: 2966.025473km
04: 4119.540847km
51: 5465.558650km
20: 5658.932842km
22: 758.127409km
Annopol: 282.801168km

: 2260.260604km
51: 4206.333008km
52: 5364.594058km
26: 5665.585238km
15: 5109.704188km
Baborow: 238.291577km

: 4452.965697km
42: 3970.852437km
50: 5573.425585km
39: 5811.661294km
22: 3244.163706km

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

...