C Primer Plus(第六版)17.12 编程练习 第1题 第一种方法

/* films2.c -- using a linked list of structures */

#include <stdio.h>

#include <stdlib.h> /* has the malloc prototype */

#include <string.h> /* has the strcpy prototype */

#define TSIZE 45 /* size of array to hold title */

struct film {

struct film * last; /* points to last struct in list */

char titleTSIZE;

int rating;

struct film * next; /* points to next struct in list */

};

char * s_gets(char * st, int n);

int main(void)

{

struct film * head = NULL;

struct film * end = NULL;

struct film * prev, * current;

char inputTSIZE;

/* Gather and store information */

puts("Enter first movie title:");

while (s_gets(input, TSIZE) != NULL && input0 != '\0')

{

current = (struct film *) malloc(sizeof(struct film));

if (head == NULL) /* first structure */

{

head = current;

head->last = NULL;

}

else /* subsequent structures */

{

prev->next = current;

current->last = prev;

}

current->next = NULL;

strcpy(current->title, input);

puts("Enter your rating <0-10>:");

scanf("%d", &current->rating);

while(getchar() != '\n')

continue;

puts("Enter next movie title (empty line to stop):");

prev = current;

end = current;

}

/* Show list of movies */

if (head == NULL)

printf("No data entered. ");

else

printf ("Here is the movie Positive sequence list:\n");

current = head;

while (current != NULL)

{

printf("Movie: %s Rating: %d\n",

current->title, current->rating);

current = current->next;

}

if (head == NULL)

printf("No data entered. ");

else

printf ("Here is the movie inverted sequence list:\n");

current = end;

while (current != NULL)

{

printf("Movie: %s Rating: %d\n",

current->title, current->rating);

current = current->last;

}

/* Program done, so free allocated memory */

current = head;

while (current != NULL)

{

free(current);

current = current->next;

}

printf("Bye!\n");

return 0;

}

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'); // look for newline

if (find) // if the address is not NULL,

*find = '\0'; // place a null character there

else

while (getchar() != '\n')

continue; // dispose of rest of line

}

return ret_val;

}

相关推荐
喵了几个咪7 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风7 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_962885729 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里10 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑11 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl11 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言
运维行者_11 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
“AI国潮设计-小江”12 小时前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
lhbweilai12 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机