顺序表项目中的小问题

为什么我顺序表结果得不到理想结果?


```c
void Testseqlist1()
{
    s1 s1;
    seqlistInit(&s1);
    seqlistpushback(&s1, 1);
    seqlistpushback(&s1, 2);
    seqlistpushback(&s1, 3);
    seqlistprint(&s1);
}
int main()
{

    Testseqlist1();
    return 0;
}

#pragma once
#include
#include

typedef int sldatatype;

typedef  struct seqlist
{
    sldatatype* a;
    sldatatype  size;
    int capacity;//数组实际存储空间
}s1;
//接口函数
void seqlistprint(s1*ps);
void seqlistInit(s1* ps);//初始化
void seqlistpushback(s1*ps, sldatatype x);//尾插
void seqlistpopback(s1*ps, sldatatype x);

```c
#include "seqlist.h"

void seqlistprint(s1*ps)
{
    for (int i = 0; i < ps->size; i++)
    {
        printf("%d,ps->a[i]");
    }
    printf("\n");

}

void seqlistInit(s1* ps)
{
    ps->a = NULL;
    ps->size = ps->capacity = 0;

}

void seqlistpushback(s1* ps, sldatatype x)
{
    if (ps->size == ps->capacity)
    {
        //如果没有空间外面就扩容
        int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
        sldatatype*tmp = (sldatatype*)realloc(ps->a, newcapacity*sizeof(sldatatype));
        if (tmp == NULL)
        {
            printf("realloc fail");
            exit(-1);
        }
        ps->a = tmp;
        ps->capacity = newcapacity;
    }
    ps->a[ps->size] = x;
    ps->size++;
}
void seqlistpopback(s1* ps);



```我想要的结果应该是123。为什么最后不是

```

基于Monster 组和GPT的调写:
,seqlistprint 函数中有一个小错误。在输出数组元素时,你没有使用正确的格式化字符串,因此结果是错误的。

将 printf("%d,ps->a[i]"); 修改为 printf("%d,", ps->a[i]); 即可解决这个问题,具体来说,应该是:

void seqlistprint(s1*ps)
{
    for (int i = 0; i < ps->size; i++)
    {
        printf("%d,", ps->a[i]);
    }
    printf("\n");
}


修改后的 seqlistprint 函数会输出正确的结果:1,2,3,。注意到这里多了一个逗号,因为你在循环中输出元素后,还输出了一个换行符。如果你不想输出这个额外的逗号,可以使用一个 if 语句判断是否是最后一个元素,然后输出换行符。

同时,你还需要实现 seqlistpopback 函数,否则在测试完 seqlistpushback 函数后,可能会有内存泄漏问题。具体实现可以参考 seqlistpushback 函数,不过需要将数组的大小减一,并释放最后一个元素的内存空间。

26行,printf("%d,ps->a[i]");改为printf("%d ",ps->a[i]);

依照我来看没有什么错,有可能是编辑器出了问题

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^