gpt4 book ai didi

c - 交换结构

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:58 25 4
gpt4 key购买 nike

# include <stdio.h>
# include <stdlib.h>

typedef struct
{
int Employee_id;
char Employee_Name[50];
float Employee_salary;

} employee;

void swap(employee *a,employee *b);

int main(int argc,char* argv[])
{
int n;
int iter,iter2,iter3,iter4;
scanf("%d",&n);
employee *start = (employee *)malloc(n*sizeof(employee));

employee temp;

for (iter = 0; iter < n;iter++)
{
scanf("%d",&((*(start+iter)).Employee_id));
scanf("%s",(*(start+iter)).Employee_Name);
scanf("%f",&((*(start+iter)).Employee_salary));

}


//USING BUBBLE SORT TO SORT ON BASIS OF IDS
for (iter2 = 1; iter2 <=n; iter2++)
{
for (iter3 = 0; iter3 <n-iter2 ; iter3++)
{
if ((start[iter3]).Employee_id > (start[iter3+1]).Employee_id)
{
swap(&start[iter3+1],&start[iter3]);
}
}
}

//PRINTING
for (iter4 = 0; iter4 < n; iter4++)
{
printf("%d\n",(*(start+iter4)).Employee_id);
printf("%s\n",(*(start+iter4)).Employee_Name);
printf("%f\n",(*(start+iter4)).Employee_salary);
printf("\n");

}
free(start);

return EXIT_SUCCESS;
}





void swap(employee *a,employee *b)
{
employee temp = *a;
*a = *b;
*b = temp;
}

我正在尝试根据员工 ID 交换结构,编译时没有出现任何错误。但是当我尝试交换结构时,程序突然终止。同样的交换适用于整数和其他基本类型,但不适用于结构。感谢您的帮助。

最佳答案

在您的 for 循环中进行排序。

for (iter2 = 0; iter2 <n; iter2++)
{
for (iter3 = 0; iter3 <n-iter2 ; iter3++) //LINE A
{
if ((start[iter3]).Employee_id > (start[iter3+1]).Employee_id)
{
swap(&start[iter3+1],&start[iter3]);
}
}
}

在A行,当iter2为0时,内层循环将从0到n-1。当 iter3n-1 时,您正在访问 n 中的项目,这将导致未定义的行为(越界索引)。

因此,按如下方式更改您的代码:

for (iter2 = 0; iter2 <n; iter2++)
{
for (iter3 = 0; iter3 <n - 1 -iter2 ; iter3++)
{
if ((start[iter3]).Employee_id > (start[iter3+1]).Employee_id)
{
swap(&start[iter3+1],&start[iter3]);
}
}
}

请确保在循环的任何迭代中,不应有越界访问。

关于c - 交换结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com