| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1509 人关注过本帖
标题:C primer plus上的一个链表示例代码
取消只看楼主 加入收藏
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
结帖率:0
收藏
 问题点数:0 回复次数:3 
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",&current->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  可是 却停不下来 怎么回事
求看看代码在运行过程中哪里导致的
图片附件: 游客没有浏览图片的权限,请 登录注册

2017-04-25 20:44
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
收藏
得分:0 
回复 4楼 renkejun1942
谢谢 可以了 最后free那部分是书的错误吗?
2017-04-25 21:27
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
收藏
得分:0 
回复 6楼 renkejun1942
你好 我还想问问 程序里面的 prev指针 在程序中充当什么  我刚刚学链表 请多指教
2017-04-26 19:35
qq200258
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-10-29
收藏
得分:0 
回复 8楼 renkejun1942
那 current 和 prev 到底是什么意思呢 我想了好久都转不过来

[此贴子已经被作者于2017-4-26 20:20编辑过]

2017-04-26 20:16
快速回复:C primer plus上的一个链表示例代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018683 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved