C语言调用函数将数组指定范围内元素按逆序重新放置如图

C语言调用函数将数组指定范围内元素按逆序重新放置
如图,我的代码中无论输入什么,形参b一直是0,运行显示有未经处理的异常。
请问大家是什么原因?
(代码只能在绿线之内更改)
测试输入:1 5 3 4 8 0 6 9 12 13
0 9
预期输出:13 12 9 6 0 8 4 3 5 1

img

你这个 p 一直在变,p + m 不是 一直 大于 p 嘛,死循环了呀
开始的 指针 重新用 一个 int *n = p + a; 然后用这个 n指针 操作循环
修改如下:

void reverse(int *p, int a,int b)
{
    int *q=p+b;
    int *n=p+a;
    int m=(a+b)/2;
    for(; n<=p+m; n++)
    {
        int temp;
        temp=*n;
        *n=*q;
        *q=temp;
        q--;
    }
}


#include "stdio.h"
#define N 10
void reverse(int *p1, int a, int b)
{
    /***** Begin *****/
    int *p=p1,*q=p1+b;
    int m=(a+b)/2;

    for (p=p1+a;p<p1+m;p++)
    {
        int temp;
        temp=*p;
        *p=*q;
        *q=temp;
        q--;
    }
    /***** End *****/
}
int main()
{
    int a[N],i,begin, end;
    for (i=0;i<N;i++)
        scanf("%d",&a[i]);
    scanf("%d%d",&begin,&end);
    reverse(a, begin, end);
    for (i=0; i<N; i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
//输入
//1 5 3 4 8 0 6 9 12 13
//0 9
//输出
//13 12 9 6 8 0 4 3 5 1
//

逆置函数这么改,供参考:

void reverse(int* p, int a, int b)
{
    /******Begin*****/
    int* qa, * qb, tmp;
    for (qa = p + a, qb = p + b; qa < qb; qa++, qb--)
    {
        tmp = *qa; *qa = *qb; *qb = tmp;
    }
    /********End*****/
}


题主的代码里,for (p = p + a; p < p + m; p++) 这里死循环了,p < p+m; p++。

输入的代码你改不了?那么你怎么输入的,要加上空格
别输入09
要输入 0 9

但问题可能出在绿线外,%d%d之间加个空格试试