这个链表小程序用子函数表达为什么不成功?
我先在main函数里建立了链表,然后尝试用子函数来编写,总是不成功。一定在错误,不知怎么改?请指点。
下面是在main中建立链表的程序:
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdbool.h"
#include "stdlib.h"
#define SIZE 40
struct film
{
char title[SIZE];
int rating;
};
typedef struct film Item;
typedef struct node
{
Item item;
struct node * next;
}Node;
int main(void)
{
Node *head = NULL, *current, *prev;
Item item;
puts("Enter first movie");
while(gets(item.title)!=NULL && item.title[0]!='\0')
{
puts("Enter the rating <0-10>:");
scanf("%d", &item.rating);
while(getchar() != '\n')
{
continue;
}
current = (Node *)malloc(sizeof(Node));
if(head == NULL)
{
head = current;
}
else
{
prev->next = current;
}
current->item = item;
current->next = NULL;
prev = current;
puts("Enter another movie:");
}
current = head;
while(current != NULL)
{
printf("%s %d\n", current->item.title, current->item.rating);
current = current->next;
}
putchar('\n');
return 0;
}
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdbool.h"
#include "stdlib.h"
#define SIZE 40
struct film
{
char title[SIZE];
int rating;
};
typedef struct film Item;
typedef struct node
{
Item item;
struct node * next;
}Node;
Node * CreateList(Item item);
int main(void)
{
Node *head = NULL, *current;
Item item;
puts("Enter first movie");
while(gets(item.title)!=NULL && item.title[0]!='\0')
{
puts("Enter the rating <0-10>:");
scanf("%d", &item.rating);
while(getchar() != '\n')
{
continue;
}
head = CreateList(item);
puts("Enter another movie:");
}
current = head;
while(current != NULL)
{
printf("%s %d\n", current->item.title, current->item.rating);
current = current->next;
}
putchar('\n');
return 0;
}
Node * CreateList(Item item)
{
Node *head, *current, *prev;
current = (Node *)malloc(sizeof(Node));
current->item = item;
current->next = NULL;
if(head == NULL)
{
head = current;
}
else
{
prev->next = current;
}
prev = current;
return head;
}
Node * CreateList(Item item)
{
// Node *head, *current, *prev; //这个时候是野指针哦!不是为NULL的
Node *head = NULL;
Node *current = NULL;
Node *prev = NULL;
current = (Node *)malloc(sizeof(Node));
current->item = item;
current->next = NULL;
if(head == NULL)
{
head = current;
}
else
{
prev->next = current;
}
prev = current;
return head;
}
Node * CreateList(Item item)
{
static Node *head = NULL;
static Node *current = NULL;
static Node *prev = NULL;
current = (Node *)malloc(sizeof(Node));
current->item = item;
current->next = NULL;
if(head == NULL)
{
head = current;
}
else
{
prev->next = current;
}
prev = current;
return head;
}
Node * CreateList(Item item)
{
// Node *head, *current, *prev;
Node *head = NULL;
Node *current = NULL;
Node *prev = NULL;
current = (Node *)malloc(sizeof(Node));
current->item = item;
current->next = NULL;
if(head == NULL)
{
head = current;
}
else
{
prev->next = current;
}
prev = current;
current = (Node *)malloc(sizeof(Node));
return head;
}