私はこのプロジェクトに取り組んでおり、C++ にはかなり慣れていません。私がやろうとしていることを説明するのはちょっと難しいですが、やってみます。だから私は flix.txt と呼ばれるファイルで作業しており、その中は次のようになっています:
1 A 5
1 B 4
1 D 3
1 F 5
2 A 1
3 E 3
3 F 1
4 A 2
最初の列は人 (私のオブジェクト)、2 番目の列は映画、3 番目の列はオブジェクトによって与えられた評価です。
最初にすべての行から最初の int を抽出し、「演算子 new」を使用してオブジェクトを作成しようとしています。次に、映画を取得して int に変換し、評価を配列にプラグインできるようにします。紛らわしく聞こえる場合は申し訳ありません。私が今持っているコードは次のとおりです。
//flix program
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#define NUMBER_OF_MOVIES 6
using namespace std;
int tokenize(string line);
int getMovieNum(char movie);
void resetPos(istream& flix);
class Matrix{
public:
int movieRate[NUMBER_OF_MOVIES];
};
int main(){
int distinctCount = 0;
int checker = -1;
int check = 0;
string line;
int personNum;
char movie;
int rating;
int movieNum;
ifstream flix("flix.txt");
ofstream flick("flix1.txt");
//identify distinct account numbers in file
while(getline(flix, line)){
check = tokenize(line);
if(check != checker)
distinctCount++;
checker = check;
check = 0;
}
//reset position in file
resetPos(flix);
//create objects in accordance with distinct numbers
Matrix* person = new Matrix[distinctCount];
for(int i = 0; i < distinctCount; i++){
for(int j = 0; j < NUMBER_OF_MOVIES; j++){
person[i].movieRate[j] = 0;
cout << i + 1 << ' ' << person[i].movieRate[j] << endl;
}
cout << "\n";
}
//reset position in file
resetPos(flix);
//get data from file and put into respective variables
while(getline(flix, line)){
flix >> personNum >> movie >> rating;
cout << personNum << ' ' << movie << ' ' << rating << endl;
//changes the char into an int
movieNum = getMovieNum(movie);
person[personNum].movieRate[movieNum] = rating;
}
//reset position in file
resetPos(flix);
//input ratings into movie array
for(int i = 0; i < distinctCount; i++){
for(int j = 0; j < NUMBER_OF_MOVIES; j++){
cout << i + 1 << ' ' << person[i].movieRate[j] << endl;
flick << i + 1 << ' ' << person[i].movieRate[j] << endl;
}
}
//write data to text file
//??
flick.close();
//free memory
delete[] person;
system("pause");
return 0;
}
int tokenize(string line){
string myText(line);
istringstream iss(myText);
string token;
getline(iss, token, ' ');
int strInt = atoi(token.c_str());
return strInt;
}
int getMovieNum(char movie){
int movieNum = 0;
switch(movie){
case 'A':
movieNum = 1;
break;
case 'B':
movieNum = 2;
break;
case 'C':
movieNum = 3;
break;
case 'D':
movieNum = 4;
break;
case 'E':
movieNum = 5;
break;
case 'F':
movieNum = 6;
break;
default:
movieNum = 0;
break;
}
return movieNum;
}
void resetPos(istream& flix){
flix.clear();
flix.seekg(0);
}
また、ここに些細な間違いがある場合は、事前にお詫び申し上げます。
問題は while ループのどこかにあると思います。そこでロックし続けます。これに何時間も費やしましたが、なぜ機能しないのかわかりません。while ループでは、ファイルのすべての行にアクセスし、その行からデータを取得し、動画の char を取得して int に変換し、そのデータをオブジェクト内の配列に挿入しようとしています。私がそれを機能させたとき、すべてのデータも間違っていました。どんな入力でも大歓迎です。前もって感謝します。