我应该编写一个程序来对结构数组进行排序,但我不知道该怎么做
I should make a program to sort struct array but I don't have any idea to do this
编辑后
代码是:
#include <stdio.h>
#include <string.h>
struct names//defining struct array with leinght of (3)
{
char firstname[50];
char lastname[50];
int age;
}n[4];
void show(struct names n[],int);//print the struct elements on the screen
void sortbyage(struct names n[],int);//sort the struct elements by age
int main(void)
{
struct names n[4];
int len=3;
strcpy(n[0].firstname,"david");
strcpy(n[0].lastname,"bekham");
n[0].age=18;
strcpy(n[1].firstname,"cristiano");
strcpy(n[1].lastname,"ronaldo");
n[1].age=20;
strcpy(n[2].firstname,"iron");
strcpy(n[2].lastname,"man");
n[2].age=16;
show(n,len);
sortbyage(n,len);
show(n,len);
return 0;
}
void show(struct names n[],int len)
{
for(int i=0;i<3;i++)
{
printf("%d-first name ==>%s\n",i+1,n[i].firstname);
printf("%d-last name ==>%s\n",i+1,n[i].lastname);
printf("%d-age==>%i\n",i+1,n[i].age);
}
}
void sortbyage(struct names n[],int len)
{
// int help=0;
for(int i=len-1;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(n[j].age>n[j+1].age)
{
n[4]=n[j];
n[j]=n[j+1];
n[j+1]=n[4];
}
}
}
}
编辑后有效
注意:在 运行 时间里,它在最后一行中键入此消息:* 进程返回 -1073741819 *)) 我该如何解决此问题并执行此操作大问题还是无关紧要???
您需要访问如下。请修改您的代码如下
if(n[j].age > n[j+1].age)
希望对您有所帮助。
编辑:
请按如下方式修改 sortbyage() 函数,它工作正常。
void sortbyage(struct names n[],int len)
{
struct names temp;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(n[i].age > n[j].age)
{
temp = n[i];
n[i] = n[j];
n[j] = temp;
}
}
}
}
编辑:
if(n[j].age>n[j+1].age)
{
help=n[j].age;
n[j].age=n[j+1].age;
n[j+1].age=help;
}
编辑后
代码是:
#include <stdio.h>
#include <string.h>
struct names//defining struct array with leinght of (3)
{
char firstname[50];
char lastname[50];
int age;
}n[4];
void show(struct names n[],int);//print the struct elements on the screen
void sortbyage(struct names n[],int);//sort the struct elements by age
int main(void)
{
struct names n[4];
int len=3;
strcpy(n[0].firstname,"david");
strcpy(n[0].lastname,"bekham");
n[0].age=18;
strcpy(n[1].firstname,"cristiano");
strcpy(n[1].lastname,"ronaldo");
n[1].age=20;
strcpy(n[2].firstname,"iron");
strcpy(n[2].lastname,"man");
n[2].age=16;
show(n,len);
sortbyage(n,len);
show(n,len);
return 0;
}
void show(struct names n[],int len)
{
for(int i=0;i<3;i++)
{
printf("%d-first name ==>%s\n",i+1,n[i].firstname);
printf("%d-last name ==>%s\n",i+1,n[i].lastname);
printf("%d-age==>%i\n",i+1,n[i].age);
}
}
void sortbyage(struct names n[],int len)
{
// int help=0;
for(int i=len-1;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(n[j].age>n[j+1].age)
{
n[4]=n[j];
n[j]=n[j+1];
n[j+1]=n[4];
}
}
}
}
编辑后有效
注意:在 运行 时间里,它在最后一行中键入此消息:* 进程返回 -1073741819 *)) 我该如何解决此问题并执行此操作大问题还是无关紧要???
您需要访问如下。请修改您的代码如下
if(n[j].age > n[j+1].age)
希望对您有所帮助。
编辑: 请按如下方式修改 sortbyage() 函数,它工作正常。
void sortbyage(struct names n[],int len)
{
struct names temp;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(n[i].age > n[j].age)
{
temp = n[i];
n[i] = n[j];
n[j] = temp;
}
}
}
}
编辑:
if(n[j].age>n[j+1].age)
{
help=n[j].age;
n[j].age=n[j+1].age;
n[j+1].age=help;
}