逐行读取文件并存储值

时间:2014-09-15 16:23:38

标签: c++ file

我有一个像。的文件:

4,3
3,2
5,1
6,5

每一行都是一个坐标。对于第一行,x1 = 4,y1 = 3.然后对于第二行,x2 = 3,y2 = 2,依此类推。此方法的目的是获取文件中的4个坐标并将它们存储在变量或数组中。我认为最好的方法是为x创建一个数组,为y创建另一个数组,因此我们将coordX[]coordY[]。由于我必须读取的文件将始终只包含4个坐标,因此两个数组的大小均为[3]。 我现在使用的代码就是:

void readFile(){
   int x1, y1;
   int coordX[3], coordY[3];
   while (infile >> x1 >> y1){
       //How to insert the coordinates into coordX[] and coordY[]?
   }
}

正如您所看到的,我不知道如何使方法将每个坐标的值插入到数组中,有没有办法使用数组?或者我应该创建int变量x1,y1,x2,y2等?提前致谢!

2 个答案:

答案 0 :(得分:2)

如果坐标数固定为4,您可以通过重复读取四次来展开循环,如下所示:

void readFile(){
   int coordX[4], coordY[4];
   infile >> coordX[0] >> coordY[0];
   infile >> coordX[1] >> coordY[1];
   infile >> coordX[2] >> coordY[2];
   infile >> coordX[3] >> coordY[3];
   ...
}

你也可以用循环来做到这一点:

void readFile(){
   int coordX[4], coordY[4];
   for (int i = 0 ; i != 4 ; i++) {
       infile >> coordX[i] >> coordY[i];
   }
   ...
}

请注意,由于您正在阅读四个项目,因此必须使用四个而非三个元素声明coordXcoordY。一般规则是,当您声明一个N项数组时,有效索引从零(包括)到N-1,包括在内。

另请注意,coordXcoordY必须在同一函数中使用,或者复制到容器或动态分配的数组,以便从readFile函数返回。

最后,如果要读取的项目数,则应更改代码以使用vectorlist代替数组来保留可变数量的结果。

  

我只是想知道,如何将逗号作为标记分隔符插入?

您可以添加类似于this answer中所述内容的peek-and-ignore代码:

void readFile(){
   int coordX[4], coordY[4];
   for (int i = 0 ; i != 4 ; i++) {
       infile >> coordX[i];
       if (infile.peek() == ',') {
           // If the next character is a comma, skip it
           infile.ignore();
       }
       infile >> coordY[i];
   }
   ...
}

答案 1 :(得分:0)

使用最少的原始代码mods

void readFile(){
   int x, y;
   int i = 0;
   int coordX[4], coordY[4];
   while (infile >> x >> y){
       //How to insert the coordinates into coordX[] and coordY[]?
       coordx[i] = x;
       coordy[i] = y;
       i++;
   }
}

当然这段代码完全错了。如果文件包含5行,它将中断,如果它包含3行,你不会知道最后一行丢失。你应该使用std :: vector,...