【发布时间】:2018-12-18 05:43:30
【问题描述】:
编写一个程序,将id、name和address输入结构数组,并使用指针按名称升序排序?
我尝试在这个论坛中搜索很多问题,但没有一个能完全帮助我。所以这是我的代码:
#include<stdio.h>
struct student
{
char name[20], add[30];
int id;
};
int main()
{
struct student s[100];
struct student *sptr;
int i, j, temp, n;
char tempc[30];
sptr=&s;
printf("How many students do we have to register?");
scanf("%d",&n);
printf("Enter the id, name and address of the students and hit enter.");
for (i=0; i<n; i++)
{
scanf("%d%s%s",&sptr->id,&sptr->name,&sptr->add);
sptr++;
}
sptr=&s;
for(i=0; i<n; i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(s[i].name,s[j].name)>0)
{
strcpy(tempc,(sptr+i)->name);
strcpy(sptr->name,(sptr+j)->name);
strcpy((sptr+j)->name,tempc);
strcpy(tempc,sptr->add);
strcpy(sptr->add,(sptr+j)->add);
strcpy((sptr+j)->add,tempc);
temp=(sptr+j)->id;
sptr->id=(sptr+j)->id;
(sptr+j)->id=temp;
}
}
}
printf("The sorted form is:");
for (i=0; i<n; i++)
{
printf("%d%s%s",sptr->id,sptr->name,sptr->add);
sptr++;
}
}
如果你知道我要去的地方,请帮帮我。是的,我不想使用任何内存分配函数或 sizeof() 函数。
【问题讨论】:
-
仅供参考,C 支持结构分配。您的结构是完全封闭的(没有指向其他数据的指针)。因此,所有这些成员副本都是毫无意义的。 ,您可以只声明一个临时
struct student并在您的数组上进行常规元素交换。您还需要打开编译器警告,因为它应该告诉您有很多地方需要char *,但提供的是char (*)[20](它们不是同义类型)。sptr = &s;也是如此,sptr = s;应该在那里。 -
顺便说一句
sizeof不是一个函数,而是一个运算符,可能它只是一个用括号括起来的常量,仅在应用于类型时才需要,使它有点然而,有点令人困惑。这是完全合法的:size_t myobject_size = sizeof arrayelem[0];
标签: c arrays sorting structure