从文件中读取多个变量类型

时间:2015-04-04 01:31:27

标签: c++

我有一个看起来像这样的文件:

5,4,A
6,3,A
8,7,B
7,6,B
5,2,A
9,7,B

我试图创建一个读取一行的类函数,并将内容分别插入到x,y,featClass中。变量类型是int x,y和char featClass。从那时起,我可以创建一个名为sample1的类的对象,该对象将包含文件中各自行的x,y和featClass。

澄清一下,每一行代表一个样本。我将为每个样本行创建一个我的类的对象,并将对象命名为sample1,sample2,etc ......

我编写代码来读取main中的文件,以确保它在我将代码插入到我的类函数之前正常工作。但是,当我运行程序并将第一行读入x,y和featClass时,每个变量的结果值分别为1,0,P,它与第一行5,4,A不匹配。

到目前为止,这是我的代码:

#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
using namespace std;

int main()
{
  //init variables
  int x,y;
  char featClass;

  //get x,y, and output params from input file
  char filename[50];
  ifstream sampleFile("sampleFile.txt");
  //cin.getline(filename,50);
  sampleFile.open(filename);

  if(!sampleFile.is_open())//check if file is not open
  {
    exit(EXIT_FAILURE);//terminates program if file is not opened correctly
  };

  while(sampleFile.peek() == ',')
  {
    sampleFile.ignore(1);`
    sampleFile >> x >> y >> featClass;
  };

  cout << x << " " << y << " " << featClass << endl;

  return 0;
}

我想知道为什么我的代码输出1,0,P输入x,y和featclass。

2 个答案:

答案 0 :(得分:0)

我注意到`after sampleFile.ignore(1); 而我要做的是制作一个for语句迭代每个字符,寻找&#34; 1&#34;的匹配,如果找到它,将其删除。

答案 1 :(得分:0)

而不是cin.peek(),你应该使用getline()来读取整行。

 while(getline(sampleFile, line))
  {
    //do stuff here
  };

然后,解析该行并使用stringstream

将值存储到x,y和featClass中

所以你的代码(读取文件并解析它)看起来与此类似:

  char ch;   <-- include this for comma
  while(getline(sampleFile, line))
  {
       //do stuff here
       stringstream sstream(line);
       //this is for your particular problem as your file format is --> int, int, char
       sstream >> x >> ch >> y >> ch >> featClass;
       cout << x << " " << y << " " << featClass << endl;
  };

点击此链接阅读并详细了解stringstream

http://www.eecis.udel.edu/~breech/progteam/stringstream.html