求救,编译过了,连接出错
//本例生成单链表存储学号、名字、年龄;允许用户存入信息和通过学生学号检索学生的其他信息。#include<stdio.h>
#include<stdlib.h>
#define op 90
typedef struct //定义存储的数据结构
{
int number;
char name;
int age;
struct Node* next;
}Node;
typedef Node* linklist;
int main()
{
int i,w;
char q;
linklist l,p,s,find;
l=(linklist)malloc(sizeof(Node));
s=(linklist)malloc(sizeof(Node));
find=(linklist)malloc(sizeof(Node));
l->next=NULL;
do //这里开始是程序的主页面,设置了循环条件,用户选择退出才能离开程序
{
printf("请输入选择的操作类型:\n1、存入信息\n2、查找信息\n3、退出\n");
q=getchar();
switch(q) //用户选择操作类型
{
case '1':
printf("请分别输入学号、名字、年龄并用逗号隔开\n");
p=(linklist)malloc(sizeof(Node));
scanf("%d,%s,%d",p->number,p->name,p->age);
p->next=l->next;
l->next=p;
printf("按下1显示所有信息记录,否则返回\n");
scanf("%d",&i);
if(i==1)
{
s=l->next;
while(i==1&&!(s->next==NULL))
{
printf("学号:%d,名字:%s,年龄:%d\n",s->number,s->name,s->age);
s-s->next;
}
printf("学号:%d,名字:%s,年龄:%d\n",s->number,s->name,s->age);
}//if
i=0;
break;
case '2':
find=l;
printf("请输入学号\n");
scanf("%d",s->number);
while(s->number!=find->number)
{
find=find->next;
}
if(s->number!=find->number) return -1;
else
printf("学号:%d,名字:%s,年龄:%d\n",find->number,find->name,find->age);
break;
default:break;
} //switch
printf("继续操作请按下1\n否则退出程序\n");
scanf("%d",&w);
}while(w==1);
return 0;
}
问题都标注了,自己看下改下。#include<stdio.h>
#include<stdlib.h>
#define op 90
typedef struct //定义存储的数据结构
{
int number;
char name;
int age;
struct Node* next;
} Naode; //不要用node,和上面的node有冲突。我帮你把所有的node都改成Naode了
typedef Naode* linklist;
int main()
{
int i,w;
char q;
linklist l,p,s,find;
l=(linklist)malloc(sizeof(Naode));
s=(linklist)malloc(sizeof(Naode));
find=(linklist)malloc(sizeof(Naode));
l->next=NULL;
do //这里开始是程序的主页面,设置了循环条件,用户选择退出才能离开程序
{
printf("请输入选择的操作类型:\n1、存入信息\n2、查找信息\n3、退出\n");
q=getchar();
switch(q) //用户选择操作类型
{
case '1':
printf("请分别输入学号、名字、年龄并用逗号隔开\n");
p=(linklist)malloc(sizeof(Naode));
scanf("%d,%s,%d",&p->number,p->name,&p->age); // 语法:scanf("%d",&变量) ,要加&
p->next=l->next;
l->next=p->next; //类型不符:这边p是linklist型,l->next是struct *Node Next.所以才会错误。
printf("按下1显示所有信息记录,否则返回\n");
scanf("%d",&i);
if(i==1)
{
s->next=l->next;//类型不符:和上面一样
while(i==1&&!(s->next==NULL))
{
printf("学号:%d,名字:%s,年龄:%d\n",s->number,s->name,s->age);
s-s->next; //你这是要干什么??
}
printf("学号:%d,名字:%s,年龄:%d\n",s->number,s->name,s->age);
}//if
i=0;
break;
case '2':
find=l;
printf("请输入学号\n");
scanf("%d",&s->number); //语法:看上面
while(s->number!=find->number)
{
find=find->next; //类型不符:看上面
}
if(s->number!=find->number) return -1;
else
printf("学号:%d,名字:%s,年龄:%d\n",find->number,find->name,find->age);
break;
default:break;
} //switch
printf("继续操作请按下1\n否则退出程序\n");
scanf("%d",&w);
}while(w==1);
return 0;
}
rockerz 发表于 2014-4-23 21:31 static/image/common/back.gif
问题都标注了,自己看下改下。
谢谢你!:handshake:handshake
感谢你看了这么久。
我还是有些不明白,想请教你。
关键是32行,你说p是linklist类型,而l->next是struct *Node Next类型,这是出错的原因。
朋友,其实我想要的效果是p和l->next同样类型。我想定义的结构是链表,也就是说我本来想定义next为指向这个结构体本身的指针。而你把原本Node全部换为了Naode,所以后来就类型不相对
然后现在就是想问你,我要定义一个结构体,结构体里面定义一个指向这个结构体本身的指针,我要怎么定义?类似于单链表,定义一个节点,里面包含数据和指针域。 还有想问问你怎么发帖的时候发代码时左边有每一行的数字 还有想问问你怎么发帖的时候发代码时左边有每一行的数字 你这种编程风格很不好,不要把所有功能都集中在主函数里,每一个独立的功能尽量使用子函数 kangkaisen 发表于 2014-4-23 23:14 static/image/common/back.gif
你这种编程风格很不好,不要把所有功能都集中在主函数里,每一个独立的功能尽量使用子函数
{:1_1:}
我是新手,不太懂,下次多用子函数 发代码旁边有数字的原因是我用了 [ code]这个东西[ /code] 自己去掉空格。
我知道你的意思了。我也对C和C++也只能算是入门,刚开始可能是误解你的代码的意思。
一下是我改好的,已加新的备注。调试成功。你再看看吧#include<stdio.h>
#include<stdlib.h>
#define op 90
struct Node //这里不需要typedef。 看的懂英文可以参考下这个帖子http://stackoverflow.com/questions/18806392/typedef-struct-declarations,看不懂谷歌翻一下
{
int number;
char name;
int age;
struct Node* next;
};
typedef Node* linklist;
int main()
{
int i,w;
char q;
linklist l,p,s,find;
l=(linklist)malloc(sizeof(Node));
s=(linklist)malloc(sizeof(Node));
find=(linklist)malloc(sizeof(Node));
l->next=NULL;
do //这里开始是程序的主页面,设置了循环条件,用户选择退出才能离开程序
{
printf("请输入选择的操作类型:\n1、存入信息\n2、查找信息\n3、退出\n");
q=getchar();
switch(q) //用户选择操作类型
{
case '1':
printf("请分别输入学号、名字、年龄并用逗号隔开\n");
p=(linklist)malloc(sizeof(Node));
scanf("%d,%s,%d",&p->number,p->name,&p->age); //语法问题, &int变量
p->next=l->next;
l->next=p;
printf("按下1显示所有信息记录,否则返回\n");
scanf("%d",&i);
if(i==1)
{
s=l->next;
while(i==1&&!(s->next==NULL))
{
printf("学号:%d,名字:%s,年龄:%d\n",s->number,s->name,s->age);
s=s->next; //估计是粗心。我猜应该是这样
}
printf("学号:%d,名字:%s,年龄:%d\n",s->number,s->name,s->age);
}//if
i=0;
break;
case '2':
find=l;
printf("请输入学号\n");
scanf("%d",&s->number); // 语法问题,看上面
while(s->number!=find->number)
{
find=find->next;
}
if(s->number!=find->number) return -1;
else
printf("学号:%d,名字:%s,年龄:%d\n",find->number,find->name,find->age);
break;
default:break;
} //switch
printf("继续操作请按下1\n否则退出程序\n");
scanf("%d",&w);
}while(w==1);
return 0;
}
我的用户组目前不能+好友或发信息。。。新鱼油的悲剧 rockerz 发表于 2014-4-24 22:08 static/image/common/back.gif
我的用户组目前不能+好友或发信息。。。新鱼油的悲剧
加个qq吧{:1_1:}
我的q:499093256:lol:
页:
[1]