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

reading several variable types from file

本文关键字:几个 变量 类型 文件 读取      更新时间:2023-10-16

我有一个文件,如下所示:

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等…

在将代码插入类函数之前,我编写了主要用于读取文件的代码,以确保它正常工作。然而,当我运行程序并将第一行读取到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中。

我注意到sampleFile.ignore(1)之后有一个`;我要做的是制作一个for语句,遍历每个字符,寻找"1"的匹配项,如果找到了,就删除它

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

 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/~后膛/progteam/stringstream.html