2016-06-21 8 views
-1

中間に近いインデックスから配列を反復処理したい場合は、最後に移動して先頭に移動します。一例として、
配列の中央から始点までを反復する

#include <stdio.h> 

int main(){ 


int a[]= {1, 2, 3, 4, 5, 6, 7,}; 

int i = 0; 

for (i = 2; i < 6; i++){ 

    if (i == 6){ 
     i = 0; 

    } 

    printf("%d\n", a[i]); 
} 

return 0; 
} 

どのように私はそれがここで(インデックス6)

+0

'場合(I == 6)' ...それはできません。 *別のループを開始することによって、インデックスが最後に到達したときにインデックスをゼロにする方法を "再割り当て"できますか? –

+0

'i = i%6'は動作しませんか? –

+0

これはおそらくもう少しの文脈を必要とするでしょう。 「中間に近い」とはどういう意味ですか?そしておそらくなぜあなたは真ん中から反復したいのですか? – danielson317

答えて

1

私はよく質問を理解している場合、あなたの配列の途中から始まり、から始まる終了配列のと第二に行くのループのための2つ、1をしたい途中(マイナス1)とアレイのを始めるに減少します。 これはあなたが使用することができ、コード、それは非常に簡単で、私のために正常に動作です:

#include <stdio.h> 

int main() { 

    int a[] = { 1, 2, 3, 4, 5, 6, 7, }; 

    int max = (int)(sizeof(a)/sizeof(a[0])); 
    int middle = (int)(max/2); 
    int i; 

    for (i = middle; i < max ; i++) { 
     printf("%d\n", a[i]); 
    } 

    for (i = middle - 1; i >= 0; i--) { 
     printf("%d\n", a[i]); 
    } 
} 
+1

私は彼が単に最初に戻って行きたいと思っていますが、センターから出発して両方向に移動したい場合、これは良い解決策です。また、 'print(i> length?a [middle + i%length]:a [length-i-1])'で始まる条件付きのループをforループとして使うこともできます。 – danielson317

+0

@ danielson317これは素晴らしい解決策になることがあります。鏡面でない出力の順序に注意してください。 – Niles

+0

わかりません。このコードは、配列の順番やコンテンツの内容には関係ありません。 – danielson317

2

は、単純な書き込みアップで終わりに到達したときにインデックスがゼロであることを「再割り当て」することができます。テストされていないので、必要に応じて調整します。アイデアはカウンタの開始を0にして、モジュラスを使用して相対値にするたびにstartの値を加算します。私はこの回答を得た前にコメントでモジュラスを指摘して

int a[]= {1, 2, 3, 4, 5, 6, 7}; 

int length = sizeof(a)/sizeof(a[0]); 
int start = length/2; 

for (int i = 0; i < length; i++) 
{ 
    printf("%d\n", a[(i+start)%length]); 
} 

そして@SouravGhoshに小道具。

+0

' length'が間違っています。あなたは 'sizeof(int)'で割り切れなかった。 –

+0

@TomKarzesありがとう。一定。私はCを使用して以来、あまりにも長い。 – danielson317

関連する問題