鱼C论坛

 找回密码
 立即注册
查看: 2108|回复: 3

求助,这个链表程序哪里错了...

[复制链接]
发表于 2014-5-17 16:55:43 | 显示全部楼层 |阅读模式
10鱼币
代码如下:
/*链表练习*/
#include <stdio.h>
#include <stdlib.h>                //提供malloc()原型 
#include <string.h>                //提供strcpy()原型
#define TSIZE 45

struct film
{
        char title[TSIZE];
        int rating;
        film *next;
};                                                //忘记这个分号会死的很惨 

int main()
{
        struct film *head;
        struct film *prev, *current;
        char input[TSIZE];
        
        puts("Enter first movie title: ");
        while(gets(input) != 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)
        {
                free(current);
                current = current->next;
        }
        
        printf("BYE BYE");
        
        return 0;
}
没发现逻辑上有什么问题,但是最后链表无法正常输出,求大神解答,不胜感激.

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-17 16:55:44 | 显示全部楼层
/*链表练习*/
#include <stdio.h>
#include <stdlib.h>                //提供malloc()原型 
#include <string.h>                //提供strcpy()原型
#define TSIZE 45

struct film
{
        char title[TSIZE];
        int rating;
        film *next;
};                                                //忘记这个分号会死的很惨 

int main()
{
        struct film *head = NULL;
        struct film *prev = NULL, *current = NULL;
        char input[TSIZE];
        
        puts("Enter first movie title: ");
        while(gets(input) != 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);
                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)
        {
                /*
                free(current);          // free 之后, 索引不到 ->next 
                current = current->next;
                */
                prev = current ->next;
                free( current );
                current = prev;
        }

        printf("BYE BYE");
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-17 17:22:34 | 显示全部楼层
本帖最后由 oggplay 于 2014-5-17 17:27 编辑

看看我的编译器警告(warning)就知道了               也就是你的31行  scanf("%d", current->rating);

友情提示:尽量用fgets()函数替代gets()
抓图33.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-17 20:07:05 | 显示全部楼层
scanf("%d", ¤t->rating);
目测这不对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 00:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表