gpt4 book ai didi

c - 链接列表不打印列表

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:03 25 4
gpt4 key购买 nike

我制作了以下链表,它没有打印列表。printrecord 函数不起作用。抱歉,代码很长。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char *name;
int roll_no;
struct student *ptr_next;
}*ptr_this,*ptr_first;
void PrintMenu(void);
void AddRecord(void);
void DeleteRecord(void);
void SearchRecord(void);
void SortRecord(void);
void PrintRecord(void);
int main()
{
char choice;
ptr_this=ptr_first=(struct student*)NULL;
while(1)
{
PrintMenu();
choice=getche();
switch(choice)
{
case '1':
AddRecord();
break;
case '2':
DeleteRecord();
break;
case '3':
SearchRecord();
break;
case '4':
SortRecord();
break;
case '5':
PrintRecord();
break;
case '6':
exit(0);
default:
printf("Enter a valid choice.\n");
getch();
}
}

}
void PrintMenu(void)
{
clrscr();
printf("Database System.\n1.Add Record\n2.Delete Record\n3.Search Record \n4.Sort Records\n5.Display Records\n6.exit");

}
void AddRecord(void)
{
char temp[100];
int i;
struct student *ptr_new;
ptr_new=(struct student*)malloc(sizeof(struct student));
if(ptr_new==(struct student*)NULL)
{
printf("Sorry but you can not add any more data becasue the computer memory is full.\n");
return;
}
printf("Enter Name:\n");
gets(temp);
ptr_new->name=(char*)malloc(sizeof(char)*(strlen(temp)+1));
strncpy(ptr_new->name,temp,strlen(temp)+1);
printf("Enter Roll no:");
gets(temp);
ptr_new->roll_no=atoi(temp);
ptr_new->ptr_next=(struct student*)NULL;
if(ptr_first->ptr_next==(struct student*)NULL)
{
ptr_first=ptr_this=ptr_new;
}
else
{
ptr_this->ptr_next=ptr_new;
ptr_this=ptr_new;
}
printf("Record Successfully added.\n");
printf("%s",ptr_this->name);
getch();
}

void DeleteRecord(void)
{
char temp[100];
int rec_no,i;
struct student* ptr_del,*ptr_prev;
printf("Enter Record Number to be Deleted:\n");
gets(temp);
rec_no=atoi(temp);
ptr_del=ptr_prev=ptr_first;
for(i=0;ptr_del!=(struct student*)NULL;i++,ptr_del=ptr_del->ptr_next)
{
if(i==rec_no)
{
if(ptr_del==ptr_first)
ptr_first=ptr_first->ptr_next;
else
ptr_prev->ptr_next=ptr_del->ptr_next;
free(ptr_del);
printf("Record #%d has been deleted.",rec_no);
getch();
return ;
}
ptr_prev=ptr_del;
}


}
void SearchRecord(void)
{
struct student *ptr_search;
char temp[100];
int roll,flag=0;
clrscr();
printf("Enter roll no to search:\n");
gets(temp);
roll=atoi(temp);
ptr_search=ptr_first;
for(;ptr_search!=(struct student*)NULL;ptr_search=ptr_search->ptr_next)
{
if(ptr_search->roll_no==roll)
{
flag=1;
printf("Result Found!\nName:\t%s\nRoll #:\t%d\n",ptr_search->name,ptr_search->roll_no);
getch();
return;
}
}
if(flag==0)
printf("Record not found!\n");
getch();

}
void SortRecord(void)
{
struct student *out,*in,*dummy;
for(out=ptr_first;out!=(struct student*)NULL;out=out->ptr_next)
{
for(in=out->ptr_next;out->ptr_next!=(struct student*)NULL;in=in->ptr_next)
{
if(!(strcmpi(out->name,in->name)))
*dummy=*in;
*in=*out;
*out=*dummy;
dummy=in;
in=out;
out=dummy;
}
}
printf("Records have been successfully sorted.");
}
void PrintRecord(void)
{
printf("HEllo");
getch();
struct student *ptr_print;
ptr_print=ptr_first;
for(;ptr_print!=(struct student*)NULL;ptr_print=ptr_print->ptr_next)
{
printf("NAME:\t%s\nROLL#:\t%d\n",ptr_print->name,ptr_print->roll_no);
printf("Press Enter to display next record or space to exit");
getch();
}


}

最佳答案

打印功能没问题,但这很可疑:

if(ptr_first->ptr_next==(struct student*)NULL)
{
ptr_first=ptr_this=ptr_new;
}
else
{
ptr_this->ptr_next=ptr_new;
ptr_this=ptr_new;
}

我会说条件应该是

if(ptr_first==NULL)

不确定为什么你没有在这个地方遇到段错误......

关于c - 链接列表不打印列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com