プログラムをテキストファイルの行末まで読み取ろうとして問題が発生しました。
次の形式(スペースで区切られたフィールド)でテキストファイル(1行に1つのアイテム)からデータを読み取ろうとしています。
- 家(12345)
- タイプ(A=自動またはM=モーターサイクル)
- ライセンス(WED123)
- 年(2012)
- msrp(23443)
データは、車両登録の合計を計算するために使用されます。
現在、プログラムは上記のようにフォーマットされたすべての行を読み取っていますが、家には複数の車両が存在する可能性があるため、行に追加のデータがあります(この場合、最初のフィールドを除くすべてが繰り返されます)。例えば:
111111 A QWE123 2012 13222 M RTW234 2009 9023
// ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
// first vehicle second vehicle
追加のデータがある行に到達すると、プログラムはそれを読み取らず、無限ループに入ります。行の追加データを読み取ってファイルの最後に到達し、プログラムを無限ループから停止するにはどうすればよいですか。
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std;
int main () // Function Header
{ // Start Function
int house;
char type;
string license;
int year, msrp ;
char ch;
ifstream inData;
ofstream outData;
inData.open("register.txt");
outData.open("vehicle.txt");
inData >> house; // Priming Read
while (inData) { // Test file stream variable
do {
inData >> type;
inData >> license;
inData >> year;
inData >> msrp;
outData << house << type << license << year << msrp << endl;
ch = inData.peek();
inData >> house;
} while(ch != '\n'); // Check for end of line
} // End while
system ("Pause");
return 0;
}