whileループでEOFを使用することはお勧めできません。 c++でWhy is iostream::eof inside a loop condition considered wrong?
にもっと、ベクターは、配列よりも好まれるべきです。しかし、あなたの先生は、ここで配列を使って示唆する何かを知っています。そのため私は、配列にソリューションを提供しています:
- はライン
- によるファイルの行を読む
- は配列のi番目のセルに割り当てidと文字列を抽出し
コード:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class City {
int id;
string name;
public:
City() {}
City(int id, string name) : id(id), name(name)
{
}
void print()
{
cout << "ID = " << id << ", name = " << name << endl;
}
};
void load_file(City* cities, const int n)
{
ifstream v_file("cities.txt");
if (v_file.is_open()) {
int number, i = 0;
string str;
char c;
while (v_file >> number >> c >> str && c == ',' && i < n)
{
//cout << number << " " << str << endl;
cities[i++] = {number, str};
}
}
v_file.close();
}
int main()
{
City cities[4]; // assuming there are 4 cities in the file
load_file(cities, 4);
for(unsigned int i = 0; i < 4; ++i)
cities[i].print();
return 0;
}
サムあなたが興味があればstd::vector
で解決してください。 =)あなたがそれらについて教えられていないなら、私はその部分をスキップして、コースでそれを行うときに後で戻ってくることをお勧めします。
City
のベクトルを使用してください。 Read the file line by lineを読み込み、あなたのクラスのインスタンスを構築することによって、あなたが読んだ行ごとにベクトルにプッシュバックすると、完了です!
例:
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
class City {
int id;
string name;
public:
City() {}
City(int id, string name) : id(id), name(name)
{
}
void print()
{
cout << "ID = " << id << ", name = " << name << endl;
}
};
void load_file(vector<City>& cities)
{
ifstream v_file("cities.txt");
if (v_file.is_open()) {
int number;
string str;
char c;
while (v_file >> number >> c >> str && c == ',' && i < n)
{
//cout << number << " " << str << endl;
cities.push_back({number, str});
}
}
v_file.close();
}
int main()
{
vector<City> cities;
load_file(cities);
for(unsigned int i = 0; i < cities.size(); ++i)
cities[i].print();
return 0;
}
入力:
Georgioss-MacBook-Pro:~ gsamaras$ cat cities.txt
1,NYC
2,ABQ
3,CCC
4,DDD
出力:
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall -std=c++0x main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
ID = 1, name = NYC
ID = 2, name = ABQ
ID = 3, name = CCC
ID = 4, name = DDD
は、あなたがあなたの宿題を自分で行うことになってされていませんか? –
配列はクラスではなく、メソッドを持つことはできません。 'std :: vector'でロード関数から配列を返す必要があります –
@ manni66 [rules](https://meta.stackoverflow.com/questions/334822/how-do-i-ask-宿題の質問には、彼らは完全に禁じられていません。これは、それが割り当てであることをOPが明らかにしなければならないと言いました。 –