2016-10-24 11 views
0

私は2つのメンバ変数を持つ構造体を持っています、それぞれintです。各繰り返しで異なる点から始まるC++配列の印刷ループを書くには?

struct trash 
{ 
    int sector; 
    int weight; 
}; 

私は各要素にこれらの構造体の1つが含まれている配列を持っています。すべてのデータは、設定された範囲内でランダムに生成されます。この場合、セクタは1-7からランダムに生成されます。また、配列はこの例ではサイズ15です。したがって、各セクターには、それに関連する重み変数の乱数があります。私が達成しようとしているのは、各セクターにどのような杭が属しているかを印刷することです。だから、フォーマットは、この

Sector 1 
Pile 1: xxx 
Pile 2: xxx 
... 
Sector 2 
Pile 1: xxx 
.... 
Sector 7 

ようになっているはずというようにそれが意味

を行った場合、この時私の試みは、これまでに最初のものから最大の部門で構造体の配列をソートしてからプリントアウトすることでしたforループを使用して配列全体を反復することにより、一言で言えば、セクタごとにソートされた後に配列をプリントアウトするだけですが、セクタごとに分割してください。私の人生は、コンパクトで簡潔な方法でこれを達成する方法を理解しているようです。以下は私が今書いたループです。なぜなら、内側のループが毎回同じポイントから始まるからです。

for(int i=0;i<NUM_SEC;i++) 
    { 
    cout<<"Sector "<<(i+1)<<endl; 
    for(int j=0;j<num_piles[i];j++) 
    { 
     cout<<"Pile "<<(j+1)<<": "<<data[j].weight<<endl; 
     cout<<endl; 
    } 
    } 

私はすでにプログラムのこの小さな側面と非常にイライラしている時間を費やしてきました。

+0

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+3

"時間"は非常に長い時間ではありません。 –

答えて

0

データ[j]ではなくデータ[j + previous_piles]にアクセスするように見えます。

int previous_piles = 0; 
for(int i=0;i<NUM_SEC;i++) 
{ 
    cout<<"Sector "<<(i+1)<<endl; 
    for(int j=0;j<num_piles[i];j++) 
    { 
    cout<<"Pile "<<(j+1)<<": "<<data[j+previous_piles].weight<<endl; 
    cout<<endl; 
    } 
    previous_piles += num_piles[i]; 
} 
0

あなたはあなたの進歩を記録していません!私は最後の訪問インデックスを格納する新しい変数last_pileを作成

int last_pile = 0; // will keep track of the last printed index 
for(int i=0;i<NUM_SEC;i++) 
{ 
    cout<<"Sector "<<(i+1)<<endl; 

    for(int j = 0; j < num_piles[i]; j++) 
    { 
     cout << "Pile " << (j+1) << ": " << data[j+last_pile].weight << endl; // sum last_pile to j 
    } 

    // updated last printed index 
    last_pile += num_piles[i]; 
    cout << endl; // empty line 'cause finihes with this sector 
} 

:次のコードで

ルック。ループ内で、この変数の値をサブインデックスjに追加して、配列から常に正しい要素を取得します。

コメントに注意してください、私はそこに有用な情報を追加しました。

関連する問題