我正在尝试读取一个字符串行,用于排列.txt文件,以便使用带有字符串的构造函数启动一个对象数组。
文本文件写成
TransAm
Mustang
Corvette
我觉得我的循环没有迭代我想要正确设置的信息。有没有一种简单的方法来实现这一目标? main.cc
#include <string>
#include <iostream>
#include "Car.cc"
#include <fstream>
using namespace std;
int main()
{
Car cars[3];
string STRING;
ifstream infile;
infile.open("cars.txt");
// THIS IS HOW IT'S ACHIEVED USING FOR-LOOP - Sam
for(int i = 0; i<3 && infile;++i){
getline(infile,STRING);
cars[i].setName(STRING);
}
/* THIS IS WHAT I HAD
while(!infile)
{
getline(infile,STRING);
for(int i = 0; i<sizeof(cars);i++){
cars[i].setName(STRING);
}
}
*/
infile.close();
for(int j = 0;j<sizeof(cars);j++){
cars[j].print();
}
}
Car.h
#include <string>
using namespace std;
class Car{
public:
Car();
Car(string);
string getName();
void setName(string);
void print();
private:
string name;
};
Car.cc
#include <string>
#include "Car.h"
using namespace std;
Car::Car()
{
}
Car::Car(string s)
{
setName(s);
}
void Car::setName(string s)
{
name = s;
}
string Car::getName()
{
return name;
}
void Car::print()
{
cout << name;
}
答案 0 :(得分:1)
这些要点需要纠正:
while (!infile)
阻止您进入循环。您可以像这样修改循环:
for (int i = 0; i < sizeof(cars) && getline(infile, STRING); ++i)
cars[i].setName(STRING);
或者像这样:
for (int i = 0; i < sizeof(cars) && infile; ++i) {
getline(infile, STRING);
cars[i].setName(STRING);
}
答案 1 :(得分:1)
正如所说,“改变while(!infile)to while(getline(infile,STRING))”但不要忘记删除getline(infile,STRING);之后。
答案 2 :(得分:1)
如果文件正确打开,你的循环暂时没有。只有在打开电话不成功时才会进入。
将循环更改为
while (getline(infile,STRING))
{
//...
}
或
while (infile)
{
//...
}