C ++解析器在没有额外行

时间:2018-05-03 10:22:20

标签: c++ parsing

我编写了一个解析器来计算坐标文件(数字,x,y)之外的距离矩阵。

该文件如下所示:

1 41 49

2 35 17

3 55 45

4 55 20

每一行代表一个城市,其坐标为(x,y)。

这是解析器。 countLines()函数只接受一个文件并返回行数。

void parseCoords(string file){

ifstream tspCoordFile;
ifstream tspCoordFile2;
tspCoordFile.open(file.c_str());
tspCoordFile2.open(file.c_str());

// test file
if(tspCoordFile.fail()){
    cerr << "Error reading file!" << endl;;
    exit(1);
}

// create variables and matrix
int k=0,k2=0;
float x, y, x2, y2;
float** matrix = new float*[countLines(file)];
for(int i = 0; i < countLines(file); ++i)
matrix[i] = new float[countLines(file)];

while(!tspCoordFile.eof()){
    tspCoordFile >> k >> x >> y;

    while(!tspCoordFile2.eof() ){
        tspCoordFile2 >> k2 >> x2 >> y2;

        // calculate distance
        matrix[k][k2]= sqrt(pow(x2-x,2) + pow(y2-y,2));
        cout << matrix[k][k2] << " ";
    }
    cout << " rownumber " << k <<endl;
    tspCoordFile2.clear();
    tspCoordFile2.seekg(0,std::ios::beg);
}
}

我遇到的问题是:除非我在坐标文件中添加一个额外的空行,否则我的程序会在正确打印3/4矩阵后崩溃。当我添加这个额外的行时,它确实打印出整个矩阵,但它显然也计算了一个额外的值,通过使用空行作为全0,每行和最后一行。

  • 该计划的附加线是什么?
  • 为什么要稳定它?
  • 如何修复它,以便我可以计算出没有空行的文件?

提前致谢。

0 个答案:

没有答案