2017-11-28 5 views
0

私は、売却されたアイテムの価格を計算する簡単なプログラムを作成しました。情報をaファイルに保存します。私は文字列と整数を含むこのファイルから読み込もうとしています。ファイルの最後まで読むには良い方法は何ですか?私は現在EOF機能を使用していますが、正しく動作していません。最後の2行を繰り返します。倍数のデータ型を持つときにファイルの最後まで読み込む適切な方法C++

void viewTransactions(); 
void viewTransactions() 
{ 
    string productName,; 
    int quantity, totalPrice; 

    ifstream infile; 
    infile.open ("transactions.txt"); 
    while(!infile.eof()) 
    { 
    getline(infile, productName); 
    infile >> quantity; 
    infile >> totalPrice; 
    infile.ignore(100, '\n'); 

    cout << productName << endl; 
    cout << quantity << endl; 
    cout << totalPrice << endl; 


    } 
} 

は "transactions.txtは" 含まれています

Product 
1 
5 
Product 
2 
10 
Product 
3 
15 

コンソール出力ファイルを読み込むとき:

Product 
1 
5 
Product 
2 
10 
Product 
3 
15 

3 
15 
+1

サンプルテキストファイルを提供してください。私は "transactions.txt"の2-3行を意味します。 – gsamaras

+0

@gsamaras私はあなたが尋ねたものを挿入しました。 –

+0

ありがとうヒューゴ。あなたは古典的な間違いを犯したので、私はあなたの質問に標準的なリンクを促しました。さらに、@BasileStarynkevitchはすでに回避策を提案しました(私はそれをチェックしませんでした)。がんばろう! =) – gsamaras

答えて

0

infile.eof()だけ後の読み出し動作(ではない "の前に" 有効です)。

for(;;) { 
    getline(infile, productName); 
    if (infile.eof()) break; 
    infile >> quantity; 
    infile >> totalPrice; 

等...(またはdo ... while(!infile.eof())ループを使用):そしてstd::getlineeofbitので、より良いコードを設定することができます。

これは理由があります(少なくともLinuxなどのPOSIXでは):OSレベルでは(つまり、syscalls(2)に記載されているシステムコールを使用して)魔法のようにEOF条件をテストする方法はありません。 前へread(2)操作。

ところで、おそらくすべての警告とデバッグ情報(g++ -Wall -Wextra -gGCC)でコンパイルする必要があります。その後デバッガgdbを使用すると、バグが見つかったはずです。

関連する問題