2017-05-13 11 views
0

配列の要素を昇順または降順に応じて異なる行に出力しようとしています。私は配列を持っています: a [] = {3,5,6,8,4,2、-1,3,6,5,4,1,3}; printArr(a、sizeof(a)、indexStart)メソッドを呼び出した後、出力は次のようになります。ここ 配列をcで昇順と降順に異なる行に印刷する方法は?

3568 
842-1-3 
-36 
6541 
13 

は私のコードです:ここ
void printArr(int *a, int size, int index){ 
int i=index; 
if(i==size) 
    return; 
printf("%d",a[i]); 
if(a[i]<a[i+1]){ 
    while(a[i]<a[i+1] && i<size){ 
     printf("%d",a[i+1]); 
     i++; 
    } 
    printf("\n"); 
} 
else{ 
    while(a[i]>a[i+1] && i<size){ 
     printf("%d",a[i+1]); 
     i++; 
    } 
    printf("\n"); 
} 
printArr(a,size,i); 
} 

は私のメイン:

int main() 
{ 
int a[] = {3,5,6,8,4,2,-1,-3,6,5,4,1,3}; 
printArr(a,13,0); 
return 0; 
} 

私はそれを実行したとき(CodeBolcksは)私は、次の入力を取得:

3568 
842-1-3 
-36 
6541 
1370 

最後に70 から来る? 私は、Linux(ターミナル)でそれをコンパイルするとき、私は、次を得る:

終わりに32767から来たの
3568 
842-1-3 
-36 
6541 
1332767 

?コードを修正するにはどうすればよいですか? 私はループと再帰を使用する必要があります。

+0

'printArr(、はsizeof(A)、indexStart)等

修正;' 'のsizeof(A) ' - >'はsizeof(A)/はsizeof(* A) ' – BLUEPIXY

答えて

0

i範囲チェックが間違っています。この

void printArr(int *a, int size, int index){ 
    int i=index; 
    if(i>=size-1) 
     return; 
    printf("%d",a[i]); 
    if(a[i]<a[i+1]){ 
     while(i<size-1 && a[i]<a[i+1]){ 
      printf("%d",a[i+1]); 
      i++; 
     } 
     printf("\n"); 
    } 
    else{ 
     while(i<size-1 && a[i]>a[i+1]){ 
      printf("%d",a[i+1]); 
      i++; 
     } 
     printf("\n"); 
    } 
    printArr(a,size,i); 
} 
+0

'size = 1'と' index = 0'の場合はどうでしょうか? – Arash

+0

@Arash何も表示されません。このプログラムでは、配列の長さが2以上であることが期待されます。 – BLUEPIXY

関連する問題