)

Posted 爱吃香蕉的猴子0000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了)相关的知识,希望对你有一定的参考价值。

Hello, 大家好,我是爱吃香蕉的猴子,记录一下书本最后的案例,主要知识点: 链表/结构体/


/*film3.c						 */
/*与list.c一起编译				 */
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"list.h"
void showMovies(Item item);
char * s_gets(char * st, int n);

int main(void)

	List movies;
	Item temp;
	/*初始化	*/
	InitializeList(&movies);
	if (ListIsFull(&movies))
	
		fprintf(stderr, "无可用内存,告辞。\\n");
		exit(1);
	
 
	/*获取用户输入 并存储*/
	puts("输入第一个电影名称:");
	while (s_gets(temp.title, TSIZE) != NULL && temp.title[0] != '\\0')
	
		puts("输入你的评分<0-10>:");
		scanf("%d", &temp.rating);
		while (getchar() != '\\n')
			continue;
		if (AddItem(temp, &movies) == false)
		
			fprintf(stderr, "分配内存出错\\n");
			break;
		
		if (ListIsFull(&movies))
		
			puts("列表满了.");
			break;
		
		puts("输入下一步电影名称(回车结束程序)");
	
 
	/*显示*/
	if (ListIsEmpty(&movies))
		printf("列表为空");
	else 
	
		printf("Here is the movie list:\\n");
		Traverse(&movies, showMovies);
	
	printf("你输入了%d个电影\\n", ListItemCount(&movies));
 
	/*清理*/
	EmptyTheList(&movies);
	printf("再见\\n");
 
	return 0;

 
void showMovies(Item item)

	printf("Movie: %s Rating: %d\\n", item.title, item.rating);

 
char * s_gets(char * st, int n)

	char * ret_val;
	char * find;
	ret_val = fgets(st, n, stdin);
	if (ret_val)
	
		find = strchr(st, '\\n');//查找换行符
		if (find)
			*find = '\\0'; //将换行符换成'\\0'
		else
			while (getchar() != '\\n')  //处理输入行剩余的字符
				continue;
	
	return ret_val;


#include<stdio.h>
#include<stdlib.h>
#include"list.h"
 
static void CopyToNode(Item item, Node * pnode);
 
void InitializeList(List * plist)

	*plist = NULL;

 
bool ListIsEmpty(const List * plist)

	if (*plist == NULL)
		return true;
	else
		return  false;

 
bool ListIsFull(const List * plist)

	Node * pt;
	bool full;
	pt = (Node *)malloc(sizeof(Node));
	if (pt == NULL)
		full = true;
	else
		full = false;
	free(pt);
	return full;

 
unsigned int ListItemCount(const List * plist)

	unsigned int count = 0;
	Node * pnode = *plist;
	while (pnode != NULL)
	
		++count;
		pnode = pnode->next;
	
	return count;

 
bool AddItem(Item item, List * plist)

	Node * pnew;
	Node * scan = *plist;
	pnew = (Node *)malloc(sizeof(Node));
	if (pnew == NULL)
		return false;
	CopyToNode(item, pnew);
	pnew->next = NULL;
	if (scan == NULL)
		*plist = pnew;
	else
	
		while (scan->next != NULL)
			scan = scan->next;
		scan->next = pnew;
	
 
	return true;

 
void Traverse(const List * plist, void(*pfun)(Item item)) 

	Node * pnode = *plist;
	while (pnode!= NULL)
	
		(*pfun)(pnode->item);
		pnode = pnode->next;
	

 
void EmptyTheList(List * plist)

	Node * psave;
	while (*plist != NULL)
	
		psave = (*plist)->next;
		free(*plist);
		*plist = psave;
	

static void CopyToNode(Item item, Node * pnode)

	pnode->item = item;


#pragma once 
#include<stdbool.h>
 
/*特定程序的声明*/
#define TSIZE 45 //存储电影名的数组大小

struct film

	char title[TSIZE];
	int rating;
;
 
 
/*一般类型定义*/
 
typedef struct film Item;
 
typedef struct node

	Item item;
	struct node * next;
Node;
typedef Node * List;
 
/*函数原型*/
 
/*操作:		初始化一个链表		*/
/*前提条件:	plist指向一个链表	*/
/*后置条件:	链表初始化为空		*/
void InitializeList(List * plist);
 
/*操作:		确定链表是否为空定义,plist指向一个已初始化的链表	*/
/*后置条件:	如果链表为空,返回ture;否则返回false				*/
bool ListIsEmpty(const List * plist);
 
/*操作:		确定链表是否已满,plist指向一个已初始化的链表		*/
/*后置条件:	如果链表已满,返回true;否则返回false				*/
bool ListIsFull(const List * plist);
 
/*操作:		确定链表中的项数,plist指向一个已初始化的链表		*/
/*后置条件:	返回链表中的项数									*/
unsigned int ListItemCount(const List *plist);
 
/*操作:		在链表的末尾添加项										*/
/*前提条件:	item是一个待添加至链表的项,plist指向一个已初始化的链表	*/
/*后置条件:	如果可以,执行添加操作,返回true;否则返回false			*/
bool AddItem(Item item, List * plist);
 
/*操作:		把函数作用于链表的每一项								*/
/*				plist指向一个已初始化的链表								*/
/*				pfun指向一个函数,该函数接受一个Item类型参数,无返回值	*/	
/*后置条件:	pfun指向的函数作用于链表的每一项一次					*/
void Traverse(const List*plist, void(*pfun)(Item item));
 
/*操作:		释放已分配的内存(如果有的话)							*/
/*				plist指向一个已初始化的链表								*/
/*后置条件:	释放为链表分配的内存,链表设置为空						*/
void EmptyTheList(List * plist);


                              Code的搬运工V1.0

以上是关于)的主要内容,如果未能解决你的问题,请参考以下文章

如何获取动态创建的电影剪辑或名称的实例名称?

在 python 中使用 mediainfo 提取电影名称

Imdb上所有电影名称、演员、导演、作家的列表

SqlException:无效的对象名称“电影”

爬取电影天堂最新电影的名称和下载链接(增量爬取mysql存储版)

text 电影名称