单链表头插法
#include <stdio.h>#include <stdlib.h>
struct Book
{
char title;
struct Book *next;
};
void getinput(struct Book *book);
void getinput(struct Book *book)
{
printf("please input the title\n");
scanf("%s",book->title);
}
void addbook(struct Book **lib);
void addbook(struct Book **lib)
{
struct Book *book,*tem;
char ch;
book=(struct Book *)malloc(sizeof(struct Book));
while(1)
{
printf("shi fou shu ru information y/n\n");
do
{
ch=getchar();
}while(ch!='y' && ch!='n');
if(ch=='y')
{
getinput(book);
}
else
{
break;
}
}
if(*lib=NULL)
{
*lib=book;
book->next=NULL;
}
else
{
tem=*lib;
*lib=book;
book->next=tem;
}
}
void printbook(struct Book *lib);
void printbook(struct Book *lib)
{
struct Book *book;
int count=1;
book=lib;
while(book!=NULL)
{
printf("book%d de title is %s",count,book->title);
book=book->next;
count++;
}
}
void freebook(struct Book *lib);
void freebook(struct Book *lib)
{
lib=lib->next;
free(lib);
}
int main(void)
{
struct Book *lib;
addbook(&lib);
printbook(lib);
freebook(lib);
return 0;
}
这段代码运行后,输入两次title,但运行结果只显示book1,不显示book2,问题出在哪呢,请大佬们指教,谢谢 问题一: 声明放最前面,告诉编译器有这个东西。编程的良好习惯。声明和定义放一起,而且已经在main前,要声明何用?
问题二:看代码
问题三:释放内存问题,自己琢磨
#include <stdio.h>
#include <stdlib.h>
struct Book
{
char title;
struct Book *next;
};
void getinput(struct Book *book);
void addbook(struct Book **lib);
void printbook(struct Book *lib);
void freebook(struct Book *lib);
int main(void)
{
struct Book *lib;
lib = NULL; // 初始化NULL
addbook(&lib);
printbook(lib);
freebook(lib);
return 0;
}
void getinput(struct Book *book)
{
printf("please input the title\n");
scanf("%s",book->title);
}
void addbook(struct Book **lib)
{
struct Book *book, *tem;
char ch;
// 循环输入
while(1)
{
book=(struct Book *)malloc(sizeof(struct Book));
printf("shi fou shu ru information y/n\n");
do
{
ch=getchar();
}while(ch!='y' && ch!='n');
if(ch=='y')
{
getinput(book);
}
else
{
break;
}
if(*lib==NULL) // 问题1:赋值 = ; 判断是否相等 ==, 问题2:初始化时你没有lib = NULL 这里何时才会=NULL?
{
*lib=book;
book->next=NULL;
}
else
{
tem=*lib;
*lib=book;
book->next=tem;
}
}
}
void printbook(struct Book *lib)
{
struct Book *book;
int count=1;
book=lib;
while(book!=NULL)
{
printf("book%d de title is %s\n",count,book->title);
book=book->next;
count++;
}
}
void freebook(struct Book *lib)
{
lib=lib->next;
free(lib);
}
ba21 发表于 2019-6-7 12:57
问题一: 声明放最前面,告诉编译器有这个东西。编程的良好习惯。声明和定义放一起,而且已经在main前,要 ...
多谢指教
页:
[1]