Внутренний цикл выполняется столько раз, сколько есть строк в отношении файлов.
Но внешний цикл выполняется только один раз, независимо от наличия других строк в отношении файлов. Я хочу сравнить значения из каждой строки первого файла (содержащие m строк) с каждой строкой второго файла (содержащей n строк). как перебрать цикл m X n раз?
ifstream gpsfixinput, geofenceinput;
gpsfixinput.open(GPSFIX_FILE, ios_base::in);
geofenceinput.open( GEOFENCE_FILE, ios_base::in);
string gline,lline ;
while(getline(gpsfixinput, lline))
{
istringstream lin(lline);
double lat,lon;
lin >> lat >> lon ;
while(getline(geofenceinput, gline))
{
istringstream gin(gline);double glat, glon, rad;
string alert;gin >> glat >> glon >> rad >>alert;
distance(lat,lon, glat, glon , rad , alert );
}
Ваш внешний цикл (вероятно) выполняется для каждой строки в вашем первом файле, но поскольку вы прочитали весь второй файл, у него нет никаких побочных эффектов.
Если вы хотите получить перекрестное произведение пар (широта, долгота) и квадов (glat, glon, rad, alert), вы должны прочитать их в виде отдельных циклов в некотором контейнере, а затем перебрать ваши контейнеры.
например
struct gpsfix
{
double lat, lon;
}
struct geofence
{
double glat, glon, rad;
string alert;
}
std::vector<gpsfix> gpsfixes;
std::vector<geofence> geofences;
while(getline(gpsfixinput, lline))
{
istringstream lin(lline);
double lat, lon;
lin >> lat >> lon ;
gpsfixes.emplace_back(lat, lon);
}
while(getline(geofenceinput, gline))
{
istringstream gin(gline);
double glat, glon, rad;
string alert;
gin >> glat >> glon >> rad >> alert;
geofences.emplace_back(glat, glon, rad, alert);
}
for (gpsfix fix : gpsfixes)
{
for (geofence fence : geofences)
{
distance(fix.lat, fix.lon, fence.glat, fence.glon, fence.rad, fence.alert);
}
}
Других решений пока нет …