つまり、基本的には、一連のデータを取り込み、結果を構造体のベクトルに入力するプログラムを作成しています。ただし、私が抱えている問題は、メイン関数にある while ループでファイルの終わりフラグが設定されないことです。
int main()
{
ifstream machineRecords;
machineRecords.open ("records.txt");
if (machineRecords.fail())
{
cout << "Failed to open \'records.txt\' please make sure it is in the same directory as the executable.";
exit(1);
}
char tempChar;
string record;
do
{
int LINE = 0;
for (int x = 0; x <= 11; x++)
{
cout << "Begin storing characters in record" << endl;
do //Stores one character at a time into the node string until it discovers the end of the node
{
tempChar = machineRecords.get();
record += tempChar;
cout << "||" << tempChar << endl;
//_getch();
} while (tempChar != '|' && tempChar != '\n');
eraseCharFromString(record, '|'); //Removes ending tag character
eraseCharFromString(record, '\n'); //Removes any sneaky newline characters
cout << "Record: " << record << endl;
switch(x)
{
case 0:
machines[LINE].idNumber = atoi(record.c_str());
break;
case 1:
machines[LINE].description = record;
break;
case 2:
machines[LINE].purchaseDate.month = atoi(record.c_str());
break;
case 3:
machines[LINE].purchaseDate.day = atoi(record.c_str());
break;
case 4:
machines[LINE].purchaseDate.year = atoi(record.c_str());
break;
case 5:
machines[LINE].cost = atof(record.c_str());
break;
case 6:
machines[LINE].history.failRate = atof(record.c_str());
break;
case 7:
machines[LINE].history.downDays = atoi(record.c_str());
break;
case 8:
machines[LINE].history.lastServiced.month = atoi(record.c_str());
break;
case 9:
machines[LINE].history.lastServiced.day = atoi(record.c_str());
break;
case 10:
machines[LINE].history.lastServiced.year = atoi(record.c_str());
break;
}
record = "";
_getch();
}
tempChar = machineRecords.get();
if (machineRecords.fail())
{
cout << "DONE" << endl;
break;
}
else
{
machineRecords.putback(tempChar);
}
++LINE;
_getch();
} while (!machineRecords.eof()); //While not at the end of the file
recordFromLastDate(1999);
machineRecords.close();
_getch();
return 0;
}
フォーマットエラーはSOの問題です。
とにかく、各行の後に別の文字をテストして読み取ろうとしても、単に eof フラグをトリガーしません。なぜそうならないのか、私にはまったくわかりません。
残念ながら、中間テスト用の他のプロジェクトが山ほどあるため、あまり多くのコードを書き直す時間はありません。