为什么我顺序表结果得不到理想结果?
```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);
```我想要的结果应该是1,2,3。为什么最后不是
```
基于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]);
依照我来看没有什么错,有可能是编辑器出了问题
不知道你这个问题是否已经解决, 如果还没有解决的话: