咕噜... 2022-04-28 00:55 采纳率: 33.3%
浏览 42
已结题

c语言 子函数参数类型错误,如何解决?

问题遇到的现象和发生背景

我写这个子函数,他就说我参数类型有问题,但是我写别的子函数,他也不报错呀

问题相关代码
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

//Status 为函数的类型,其值是函数结果状态代码,如OK等
typedef int Status; 

// ElemType为数据元素类型,根据实际情况而定,这里假设为int 
typedef int ElemType;  

#define MAXSIZE 50              /* 存储空间初始分配量 */
typedef struct
{
    ElemType data[MAXSIZE];  /* 数组,存储数据元素 */
    int length;              /* 表当前有效长度 */
}SqList;   
void input(SqList *L)
{
    int pre,i=0;
    L->length =0;
    for(i=0;;i++)
    {
        scanf("%d",&pre);
        if(pre==-1)
        {
            break;
        }
        else
        {
            L->data[i]=pre;
            L->length++;
        }
    }
}

void ListInsert_Sq(SqList *L,int i,int e)                    //在L中第i个位置之前插入新的数据元素e,L的长度加1。
{
    // 插入的位置是i
    int j;
    int len=L->length ;
    int b[len+1];
    for(j=0;j<len+1 ;j++)
    {
        if(j<i)
        {
            b[j]=L->data [j];
        }
        else if(j==i)
        {
            b[j]=e;
         } 
         else
         {
             b[j]=L->data [j-1];
         }
     } // 插入后的数全在b 数组中 
     int k;
     L->length =len+1;
     for(k=0;k<len+1;k++)
     {
         L->data [k]=b[k];
     }
}


int main()
{
    int i;
    SqList a;
    ElemType e;
    input(&a);                  // 要修改a数组中的数据,所以传地址 
    ListInsert_Sq(a, 2, 4);    // 在第二个位置之前插入e 

    for(i=0;i<a.length ;i++)
    {
        printf("%d ",a.data [i]);
    }
    return 0;
}

运行结果及报错内容

img

我想要达到的结果

比如输入数组为[1,3,4,3,5],插入后输出应该是[1,4,3,4,3,5]

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-04-28 08:38
    关注

    修改见注释,供参考:

    #include<stdio.h>
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    
    //Status 为函数的类型,其值是函数结果状态代码,如OK等
    typedef int Status;
    
    // ElemType为数据元素类型,根据实际情况而定,这里假设为int 
    typedef int ElemType;
    
    #define MAXSIZE 50              /* 存储空间初始分配量 */
    typedef struct
    {
        ElemType data[MAXSIZE];  /* 数组,存储数据元素 */
        int length;              /* 表当前有效长度 */
    }SqList;
    void input(SqList* L)
    {
        int pre, i = 0;
        L->length = 0;
        for (i = 0;; i++)
        {
            scanf("%d", &pre);
            if (pre == -1)
            {
                break;
            }
            else
            {
                L->data[i] = pre;
                L->length++;
            }
        }
    }
    
    void ListInsert_Sq(SqList* L, int i, int e)//在L中第i个位置之前插入新的数据元素e,L的长度加1。
    {
        // 插入的位置是i                  //修改
        //int j;
        //int len = L->length;
        //int b[len + 1];      修改
        //for (j = 0; j < len + 1; j++)
        //{
        //    if (j < i)
        //    {
        //        b[j] = L->data[j];
        //    }
        //    else if (j == i)
        //    {
        //        b[j] = e;
        //    }
        //    else
        //    {
        //        b[j] = L->data[j - 1];
        //    }
        //} // 插入后的数全在b 数组中 
        int k;
        if (i<1 || i>L->length) return;
        //L->length = len + 1;
        for (k = L->length; k > i - 1; k--)  //for (k = 0; k < len + 1; k++) 修改
            L->data[k] = L->data[k - 1];     //修改
        L->data[k] = e;                     //修改
        L->length++;                        //修改
    }
    int main()
    {
        int i;
        SqList a;
        ElemType e;
        input(&a);                  // 要修改a数组中的数据,所以传地址 
        ListInsert_Sq(&a, 2, 4);    // 在第二个位置之前插入e 
        //ListInsert_Sq(a, 2, 4);  修改
        for (i = 0; i < a.length; i++)
        {
            printf("%d ", a.data[i]);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 已采纳回答 5月2日
  • 修改了问题 4月28日
  • 创建了问题 4月28日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装