初学者ゆえに、拙いコードや分かりにくい質問などありましたら申し訳ありません。
テキストファイルと駅名を引数として、任意の2つの駅名の距離を求めるプログラムを作成しています。起点となる駅が存在し、その駅からの距離の差の絶対値をここでは「距離」としており、テキストファイルには駅名と基点駅からの距離が ',' 区切りで記述されています。また、存在しない駅名が入力された時には、-1と表示します。
私は以下のようにプログラムを記述しました。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
double dist(char *name1, char *name2, char *fo)
{
int i, num = 0;
int jud = 0,jud2 = 0;
char *str;
double dist1, dist2;
FILE *fp;
fp = fopen(fo, "r");
if (fp == NULL)
{
printf("ファイルが開けません\n");
return -1;
}
while (fscanf(fp, "%s", str) != EOF)
{
char *token = strtok(str, ",");
if (strcmp(token, name1) == 0)
{
dist1 = atof(strtok(NULL, ","));
jud = 1;
} else if (strcmp(token, name2) == 0)
{
dist2 = atof(strtok(NULL, ","));
jud2 = 1;
}
}
if(jud == 1 && jud2 == 1)
{
return fabs(dist1 - dist2);
}
else
{
return -1;
}
}
int main(int argc, char **argv)
{
double di;
if (argc != 4)
{
printf("Argument error");
exit(1);
}
di = dist(argv[2], argv[3], argv[1]);
if (dist < 0)
{
printf("distance:-1.0\n");
return 0;
}
printf("distance:%.1f\n",di);
return 0;
}
自身で調べて、printfの記述によってメモリがたまたまかみ合い、実行されたということは分かったのですが、最初のプログラムのどこにエラーがあるのかが分かりません。お教え頂ければ幸いです。
OS :Windows
コンパイラ名:gcc
長文、失礼いたしました。