jfkud_1 2013-10-31 14:31
浏览 1025

一个c语言单向链表,编译通过,运行结果却不知所谓,请求帮助

这段代码在rhel6中用gcc编译通过,运行结果未定义,其中作的链表按number大小排序打印出来是没有排过序的结果,而且输入记录多了,其中某些项的number打印出来会由输入的值变成0或者一个莫名其妙的整数.
vs2008中编译通过,打入多项记录只能显示2条,而且前一条是乱码.
最简单的一个数据结构,却忙了半天还查不出原因,帮个忙吧-_-|||

原代码:
/*简单单向链表,输入学生名称和号码,按号码排序,

  • 如果号码相同则记录合并为一条,附输出函数*/ #include #include #include #include #define N 50 #define LEN (sizeof(student *))

static int n=0;//计数器

typedef struct student{
char name[N];
int number;
struct student *next;}student;//链表节点结构

int main()
{
student *add(student *head);//添加记录函数声明
void list(student *head);//列表函数声明
student *head=NULL;
while(1){
printf("'N/n' to add,'L/l' to list,other to exit:");
char ch=toupper(getchar());
getchar();
if(ch=='N')head=add(head);
else if(ch=='L')list(head);
else break;}
return 0;
}//主函数

student add(student *head){
student *p,*p1=head,*p2=head;
p=(student *)malloc(LEN);//分配一片空间
printf("Input name:");
gets(p->name);
printf("Input number:");
scanf("%d",&p->number);
scanf("%
[^\n]");
scanf("%*c");
if(p->number<=0){//如果输入号码<=0,直接返回
printf("Wrong number!!\n");
return head;}
else{
if(head==NULL){//如果表空直接接到头指针
head=p;
head->next=NULL;
n++;}
else{//表不空
//确定p1指向
while(p->number>p1->number&&p1->next!=NULL){
p2=p1;//p2保存p1指向下一节点之前的值
p1=p1->next;}
if(p->numbernumber){//插入表中的情况
p2->next=p;
p->next=p1;
n++}
//如果号相等,合并记录
else if(p->number==p1->number)strcpy(p1->name,p->name);
else if(p1->next==NULL){//输入新记录的号码比链表里所有都大的情况
p1->next=p;
p->next=NULL;
n++;}
}
}
return head;}

void list(student *head){//遍历打印函数
student *p=head;
printf("There's %d records!!\n",n);
printf("Name:\t\tNumber:\n");
while(p){
printf("%s\t\t%d\n",p->name,p->number);
p=p->next;}
}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog