我有一个看起来像这样的文件:
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。
答案 0 :(得分:0)
我注意到`after sampleFile.ignore(1); 而我要做的是制作一个for语句迭代每个字符,寻找&#34; 1&#34;的匹配,如果找到它,将其删除。
答案 1 :(得分:0)
而不是cin.peek()
,你应该使用getline()来读取整行。
while(getline(sampleFile, line))
{
//do stuff here
};
然后,解析该行并使用stringstream
所以你的代码(读取文件并解析它)看起来与此类似:
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