2017-01-20 8 views
0

私はこのコードを実行し、エラーを超える時間を得ました。配列のサイズ、要素、シフト幅を指定して循環右シフトを実装しています。なぜこれが実行問題を引き起こしているのか理解しています。配列時のCの循環右シフトが無限ループを超えていますか?

#include<stdio.h> 
void main() 
{ 
int n,i; 

//array size input 
scanf("%d",&n); 
int a[n]; 

//array elements input 
for(i=0;i<n;i++) 
{ 
    scanf("%d",&a[i]); 
} 

// shift amount input 
int s,temp; 
scanf("%d",&s); 

//single right shift for S number of times 
for(i=0;i<s;i++) 
{ 
    temp=a[n-1]; 
    for(i=n-1;i>0;i--) 
    a[i]=a[i-1]; 
    a[0]=temp; 
} 

//Output of shifted array 
for(i=0;i<n;i++) 
{ 
    printf("%d\n",a[i]); 
} 
} 
+0

は 'int'が' 'main()のための唯一の標準的な戻り値の型であることに注意してください。 – NathanOliver

+1

おそらくネストされた 'for'ループと関係しています。より効率的な方法を探してください。 – dbush

+6

内側と外側のネストされた 'for'ループの両方に同じインデックス変数' i'を使用しています。 – markgz

答えて

0

:)これまであなたが外側と内側のループの両方で同じ変数を使用しての主な変更点は、そのsネストされたループで必要とされています。

修正は以下のように記されています。
ライブデモをhttp://ideone.com/DaokVy

#include <stdio.h> 


int main() // use properly 
{ 
int n,i; 

//array size input 
scanf("%d",&n); 
int a[100]; //edit 

//array elements input 
for(i=0;i<n;i++) 
{ 
scanf("%d",&a[i]); 
} 

// shift amount input 
int s,temp,j; 
scanf("%d",&s); 


for(i=0;i<s;i++) 
{ 
temp=a[n-1]; 

for(j=n-1;j>0;j--) // use different variable here 
    a[j]=a[j-1]; 

a[0]=temp; 
} 

//Output of shifted array 
for(i=0;i<n;i++) 
{ 
printf("%d\n",a[i]); 
} 

return 0; // exit success 
} 
+0

@Recurse upvoteこれが役立ちましたら受け入れてください。ありがとう –

関連する問題