我必须从一个格式如此
的数据文件中读取 abcd(string)1(int)2(int)3(int)
abcde(string)4(int)3(int)2(int)
。
。
。
我想执行一些仅在同一行中使用变量的函数。但这是我的代码。我是初学者所以请指正,谢谢。
<。>文件中的
#include <string>
using namespace std;
#ifndef CALC_H
#define CALC_H
class Calc
{
public:
void readFile(string file);
private:
string name;
int a;
int b;
int c;
};
#endif
在实施文件中
#include "Vehicle.h"
#include iostream>
#include fstream>
#include string>
#include cstdlib>
#include cmath>
using namespace std;
void Vehicle::readFile(string filename)
{
ifstream myIn;
int totalNum=0;
myIn.open(filename.c_str());
if (!myIn)
{
cerr<<"Data file failed to open!\n";
exit (0);
}
for (int i=0; i<MAX; i++)
{
while (myIn.peek() != EOF)
{
myIn>>calc[i].name;
myIn>>calc[i].a;
myIn>>calc[i].b;
myIn>>calc[i].c;
totalNum++;
}
}
myIN.close();
然后我想显示我刚刚从文件中读取的内容
for (int i = 0; i < MAX; i++)
cout << calc[i].name << calc[i].a << calc[i].b << calc[i].c << endl;
抱歉,如果我走在正确的道路上,我只想知道很多我想知道的事情。感谢
答案 0 :(得分:2)
执行此操作的正确方法是为您的班级>>
重载Calc
运算符。
class Calc {
public:
friend istream& operator >>(istream& myIn, Calc& calc);
};
istream& operator >>(istream& myIn, Calc& calc) {
myIn >> calc.name;
myIn >> calc.a;
myIn >> calc.b;
myIn >> calc.c;
return myIn;
}
现在你可以这样做:
while (myIn >> calc[i]) {
++totalNum;
}
答案 1 :(得分:0)
你应该考虑设计它有点不同。
创建一个包含一行的类,即字符串int int int - 就像你在“Calc”中拥有它一样,但不依赖于你如何创建一行(readfile)。让我们称之为“线”
class Line
{
public:
std::string name;
int a;
int b;
int c;
};
既然你需要阅读几行,你需要某种容器来容纳它们,创建一个Line(或其他容器)的矢量
std::vector<Line> contents;
然后覆盖流操作符,如Tushar建议的那样,当您从文件(或从例如stdin)读取时,您可以为您读取的每一行创建Line实例,这些实例用于填充'contents'数组
现在你可以开始做你想做的任何事情,即实际操作calc