gpt4 book ai didi

c - 结构数组 - 删除/添加元素和打印

转载 作者:太空狗 更新时间:2023-10-29 17:22:21 27 4
gpt4 key购买 nike

对于下面的代码

struct orderSlip
{
char source[64];
char destination[64];
char item[64];
int position;
};
//global
struct orderSlip data[100];

除了下面这些方法之外,还有其他方法可以打印出每个元素的数据吗:

printf("%s\n",data[0].source);
printf("%s\n",data[0].destination);
printf("%s\n",data[0].item);
printf("%i\n\n", data[0].position);

printf("%s\n",data[1].source);
printf("%s\n",data[1].destination);
printf("%s\n",data[1].item);
printf("%i\n", data[1].position);

等等

for(int n = 0; n< 3; n++)
{
printf("%s\n",data[n].source);
printf("%s\n",data[n].destination);
printf("%s\n",data[n].item);
printf("%i\n\n", data[n].position);
}

对于删除和添加,我必须创建一个动态结构数组吗?如果是这样,那么最简单的语法是什么?像这样的 C++ 代码

int * bobby;
bobby = new int [5];
delete bobby[5];

但在 C 中?我猜这与 malloc 和 free 有关

最佳答案

为了删除和添加,我是否必须创建一个动态结构数组?如果是这样,最简单的语法是什么?像这样的 C++ 代码

如果您知道您永远不会拥有超过 x 件元素,或者至少检查以确保您没有超过计划的最大数量,则不会。然后你可以使用你的静态数组。

添加只需要你有一个变量来跟踪数组中有多少项:

void add_item(struct orderSlip *p,struct orderSlip a,int * num_items)
{
if ( *num_items < MAX_ITEMS )
{
p[*num_items] = a;
*num_items += 1;
}
}

从静态数组中删除需要一个 for 循环,将其上方的项目向下移动一个并递减跟踪项目数量的 int。

void delete_item(struct orderSlip *p,int *num_items, int item)
{
if (*num_items > 0 && item < *num_items && item > -1)
{
int last_index = *num_items - 1;
for (int i = item; i < last_index;i++)
{
p[i] = p[i + 1];
}
*num_items -= 1;
}
}

您可以通过将结构传递给完成工作的函数来简化打印结构。

void print(const struct orderSlip  *p);

void print(const struct orderslip s);

可选

void print(const struct orderslip s, FILE *fp);

void print(const struct orderslip *p, FILE *fp)
{
fprintf(fp,"%s\n",p->source);
...
}

void print_all(const struct orderSlip *p, int num_items)



//global
struct orderSlip data[MAX_ITEMS];
int num_items = 0;



int main(void)
{
...
print_all(data,num_items);
strcpy(a.source,"source 2");
strcpy(a.destination,"destination 20");
strcpy(a.item,"item xyz");
a.position = 99;
add_item(data,a,&num_items);
print_all(data,num_items);
delete_item(data,&num_items,0);
print_all(data,num_items);

关于c - 结构数组 - 删除/添加元素和打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12066046/

27 4 0
文章推荐: c - 数组的数组和多维数组有什么区别?
文章推荐: c - 函数原型(prototype)声明 c
文章推荐: angular -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com