数据结构C语言版。编译器没报错。不知道哪里有问题。求大神解答

//若干城市的信息存入一个带头结点的单链表,节点中的城市信息包括城市名、城市的位置坐标。要求
//(1)给定一个城市名,返回其位置坐标。(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市
#include
#include
#include
#include
#define Null 0

typedef struct node
{
char name[20];
float x,y;
struct node *next;
} Node,*CITY;//定义单链表结点

void InitList(CITY L)
{
L=(CITY)malloc(sizeof(Node));
L->next=Null;
}//初始化单链表

void CreateList(CITY L)
{
Node r,*s;
char city[20];
float a,b;
int flag=1;
r=L;
printf("当输入$时表示输入结束");
while(flag)
{
printf("请输入城市名:");
scanf("%s",city);
if(strcmp("$",city)!=0)
{ printf("请输入该城市的坐标x和y:");
scanf("%f%f",&a,&b);
s=(Node
)malloc(sizeof(Node));
strcpy(s->name,city);
s->x=a;
s->y=b;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=Null;
}
}
}//尾插法建立单链表

void FindCoordinate(CITY L,char c[])
{
Node *p;
p=L->next;
while(strcmp(p->name,c)!=0)
{
p=p->next;
}
printf("该城市的位置坐标为%f,%f",p->x,p->y);
}//查找结点信息

void FindCity(CITY L,float a,float b,float D)
{
Node *p;
float d;
p=L->next;
printf("符合条件的有以下城市:\n");
while(p->next!=Null)
{
d=sqrt(pow((p->x)-a,2)+pow((p->y)-b,2));
if(d<=D)
printf("%s",p->name);
p=p->next;
}
}

int main()
{
CITY L;
InitList(L);
CreateList(L);
float a,b,D;
char Name[20];
printf("您想要查找的城市是:");
scanf("%s",Name);
FindCoordinate(L,Name);
printf("请输入坐标P的值以及距离D:");
scanf("%f%f%f",&a,&b,&D);
FindCity(L,a,b,D);
return 0;
}

2个回答

r=L;类型都不一样;r是结构体对象,L是结构体对象指针;

qq_36479773
Laishiji 回复ChildHood1949: 谢谢啦。我才注意到粘贴过来不知道为什么r前面少了*号。。。但是我原来的问题应该是主函数里面的里弄错了。。
2 年多之前 回复

首先你这句应该会报错吧
s=(Node)malloc(sizeof(Node));
CreateList函数里r=L; 不报错?
而且你这个意图是修改L,你直接操作他就行了

qq_36479773
Laishiji 回复qq_36479773: 不知道为啥图片看不了。。
2 年多之前 回复
qq_36479773
Laishiji 回复leumber: 嗯第一句我的源码是s=(Node*)malloc(sizeof(Node));好像是我后来改错了。。。 第二个r=L为什么错了啊。。。我照着书上写的。。![图片说明](http://img.ask.csdn.net/upload/201710/16/1508122791_647711.png)
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问