C primer plus上的一个链表示例代码
程序代码:
#include <stdio.h> #include <stdlib.h> /* 提供malloc原型 */ #include <string.h> /* 提供strcpy原型 */ #define TSIZE 45 /* 储存片名的数组大小 */ struct film { //定义链表结构 char title[TSIZE]; int rating; struct film * next; /* 指向链表的下一个结构 */ }; char * s_gets(char * st,int n); int main() { struct film * head = NULL; struct film * prev, *current; char input[TSIZE]; /* 收集并存储信息 */ puts("Enter first movie title: "); while (s_gets(input,TSIZE)!= NULL && input[0] != '/0') { current = (struct film *)malloc(sizeof (struct film)); if(head == NULL) /* 第一个结构*/ head = current; else prev->next = current; current ->next = NULL; strcpy(current ->title,input); puts("Enter your rating <0-10>: "); scanf("%d",¤t->rating); while(getchar() != '\n') continue; puts("Enter next movie title (empty line to stop):"); prev = current; } /* 显示电影列表 */ if(head == NULL) printf("No data entered"); else printf("Here is the movie list:\n"); current = head; while(current != NULL) { printf("Movie: %s Rating :%d\n", current->title,current->rating); current = current->next; } /* 完成任务,释放已分配的内存 */ current = head; while(current != NULL) { current = head; head = current->next; free(current); } 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'); //查找换行符 if(find) //如果地址不是 NULL *find = '\0'; //才此处放置一个空字符 else while(getchar() != '\n') continue; //处理剩余数入行 } return ret_val; }
代码要求输入 电影 以及 rate 然后 empty line to stop 可是 却停不下来 怎么回事
求看看代码在运行过程中哪里导致的