-1

内循环的执行次数与文件中的行数一样多。但是外循环只执行一次,无论文件中是否存在其他行。我想将第一个文件的每一行(包含 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 );

        }
4

1 回答 1

0

您的外部循环(可能)为您的第一个文件中的每一行运行,但是因为您已经阅读了整个第二个文件,所以它没有任何副作用。

如果您想要 (lat, lon) 对和 (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);
    }
}
于 2017-07-12T11:10:31.917 回答