2016-05-04 6 views
0

私の割り当てでは、以下にある「ITEMRECORD.txt」というファイルにレコードのリストを含むファイルを作成することが尋ねられます。割り当てのヘルプ特定の都市の「出荷」と「注文」の各アイテムの金額を更新する

type warehouse amt1 amt2 amt3 
    ----------------------------- 
    s NewYork 23 14 1 
    s Miami  25 25 25 
    s LosAngeles 40 13 17 
    s Houston 100 30 10 
    s Chicago 42 23 19 
    s NewYork 0 0 15 
    s Miami  13 17 21 
    o LosAngeles 15 10 15 
    o NewYork 12 24 8 
    o Houston 75 45 10 
    o Chicago 20 15 15 
    o NewYork 15 0 0 
    s LosAngeles 10 20 10 
    s Houston 0 30 40 
    o NewYork 15 15 25 
    o Chicago 75 30 40 
    s NewYork 20 15 20 
    o Houston 10 20 10 

私はしかし、私はとのトラブルを抱えています一部であるテキストと数字の各行に読んで、「出荷」と「注文」

#include <iostream> 
    #include <iomanip> 
    #include <fstream> 

    using namespace std; 
    ifstream itemRec; 

    struct record 
    { 
     char type; 
     string warehouse[5] = {"NewYork", "LosAngeles", "Miami", "Houston", "Chicago"}; 
     int amt[3] = {0,0,0}; 
    }; 
    struct price { 
     double price; 
    }; 

    int main() 
    { 
     itemRec.open("ITEMRECORD.txt"); 
     record records; 
     price item[3]; 

     string city1; 
     int amt1, amt2, amt3; 

     if(!itemRec) 
     { 
      cout << "Cannot open the record of items file!! Check file please!" << endl; 
     } 

     for (int i=0; i<3; i++) 
     { 
      itemRec >> item[i].price; 
     } 

     while (itemRec >> records.type) 
     { 

      if (records.type == 's')       // READING IN A  SINGLE SHIPMENT CARD 
      {  
       itemRec >> city1; 
       for(int i=0; i<5; i++) 
       { 
        if (city1 == records.warehouse[i]) 
        { 
          itemRec >> records.amt[0]; 
          itemRec >> records.amt[1]; 
          itemRec >> records.amt[2]; 
        } 
       } 
      cout << records.type <<"\t" << city1 << "\t" << records.amt[0] << "\t" << records.amt[1] << "\t" << records.amt[2] << endl; 
      } 
      else if (records.type == 'o')       // READING IN A SINGLE ORDER CARD 
      { 
       itemRec >> city1; 
       for(int i=0; i<5; i++) 
       { 
        if (city1 == records.warehouse[i]) 
        { 
          itemRec >> records.amt[0]; 
          itemRec >> records.amt[1]; 
          itemRec >> records.amt[2]; 
        } 
       } 
      cout << records.type <<"\t" << city1 << "\t" << records.amt[0] << "\t" << records.amt[1] << "\t" << records.amt[2] << endl; 
      } 
     } 

を区別するためのコードを記述することができました各倉庫内の品目の数を更新するために各カードが読み込まれているので、たとえば、最初の行は s NewYork 23 14 1となり、s NewYork 0 0 15と表示されます。amt1、amt2、amt3の数字をそれぞれ23 14 16に更新したいとします。

特定都市の金額を更新するコードの作成を開始するにはどうすればよいですか?あなたが見つけるものは何でも

+0

私はここに質問が表示されません。 –

+0

あなたが求めていることは明確ではありません。 _プログラムは数字を更新します。あなたは実際に何が起こっているのか、それとも何をしたいのですか? –

+0

私はそれを十分に明確にしていないことをお詫びしますが、それは私が起こりたいことです。 –

答えて

1

、あなたはすぐにそれを割り当て、古い値を削除する:

if (city1 == records.warehouse[i]) 
{ 
    itemRec >> records.amt[0]; 
    itemRec >> records.amt[1]; 
    itemRec >> records.amt[2]; 
} 

はので、代わりにこれを行う:

if (city1 == records.warehouse[i]) 
{ 
    itemRec >> temp1; // declare a place holder 
    itemRec >> temp2; 
    itemRec >> temp3; 

    records.amt[0] += temp1; // add the holder's value to the current value 
    records.amt[1] += temp2; 
    records.amt[2] += temp3; 
} 
+0

本当に助かりました。一時的な変数を最初に作成してから現在の値に追加する理由は、今やもっと意味があります。ただし、都市別に更新するのではなく、各行に追加しています。 –

+0

あなたは 'if(city1 == records.warehouse [i])'をチェックしているので、そうしてはいけません。だから、どこにそれを置くべきか、あなたの問題のアイデアと修正点であるこの投稿をどう使うのかを見てください。 –

+1

@AzmainSyedこの答えがあなたの現在の問題を解決するのに役立つなら、他の人も恩恵を受けられるようにこの答え。 –

関連する問題