我试图根据它们是升序还是降序来打印不同行中的数组元素。例如,我有一个数组: 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来自哪里?我该如何修复我的代码? 我必须使用循环和递归。
答案 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);
}