如何根据c在不同的行中上升和下降来打印c中的数组?

时间:2017-05-13 08:02:35

标签: c arrays pointers recursion

我试图根据它们是升序还是降序来打印不同行中的数组元素。例如,我有一个数组: a [] = {3,5,6,8,4,2,-1,-3,6,5,4,1,3};在我调用方法printArr(a,sizeof(a),indexStart)之后;输出应该是:

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(终端)中编译它时,我得到以下内容:

3568
842-1-3
-36
6541
1332767

最后的32767来自哪里?我该如何修复我的代码? 我必须使用循环和递归。

1 个答案:

答案 0 :(得分: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);
}