user-0 提问: C语言单链表递归输出报错

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct  node {     char num[20];     struct node * link; }; //typedef node NODE; typedef struct node NODE;  int create(NODE *head,int n); int output(NODE *head); void show(NODE *phead); //void main() int main() {     NODE *head ;     NODE *p;     p=(NODE*)malloc(sizeof(NODE));     p->link=NULL;     head=p;     printf("please enter 5 numbers separated by new lines:\n");     //int create(NODE *head,int n);     create(head,5);     //show(head);     printf("the numbers output:\n");     //int output(NODE *head);     output(head->link); }  int create(NODE *head,int n) {     NODE *p, *prev;      prev = head;     for(int i=0;i<n;i++)     {         p=(NODE*)malloc(sizeof(NODE)) ;         fgets(p->num, 20, stdin);         prev->link = p;         prev = p;     }     return 0; }  void show(NODE *phead) {     NODE *p = phead->link;      while (p) {         printf("%s\n", p->num);         p = p->link;     } }  int output(NODE *head) { #if 1     if (!head)         return 0;      output(head->link);     puts(head->num); #else     if(p!=NULL && p->link!=NULL)     {         //output(NODE* p->link);         output(p->link);     }     if(p!=NULL)         puts(p->num); #endif     return 0; }  供参考～  有问题的地方都做了修改，供参考～

user: user-2
content: typedef node NODE;   改成typedef struct node NODE;

user: user-0
content: 引用 5 楼 自信男孩 的回复:[quote=引用 3 楼 baidu_38357721 的回复:] [quote=引用 2 楼 自信男孩 的回复:] #include<stdio.h> #include<stdlib.h>  struct  node {     char num[20];     struct node * link; }; //typedef node NODE; typedef struct node NODE;  int create(NODE *head,int n); int output(NODE *head); void show(NODE *phead); //void main() int main() {     NODE *head ;     NODE *p;     p=(NODE*)malloc(sizeof(NODE));     p->link=NULL;     head=p;     printf("please enter 5 numbers separated by new lines:\n");     //int create(NODE *head,int n);     create(head,5);     //show(head);     printf("the numbers output:\n");     //int output(NODE *head);     output(head->link); }  int create(NODE *head,int n) {     NODE *p, *prev;      prev = head;     for(int i=0;i<n;i++)     {         p=(NODE*)malloc(sizeof(NODE)) ;         fgets(p->num, 20, stdin);         prev->link = p;         prev = p;     }     return 0; }  void show(NODE *phead) {     NODE *p = phead->link;      while (p) {         printf("%s\n", p->num);         p = p->link;     } }  int output(NODE *head) { #if 1     if (!head)         return 0;      output(head->link);     puts(head->num); #else     if(p!=NULL && p->link!=NULL)     {         //output(NODE* p->link);         output(p->link);     }     if(p!=NULL)         puts(p->num); #endif     return 0; }  供参考～  有问题的地方都做了修改，供参考～  这个没报错，但是不能输出。还有show函数是干什么用的呀，是输出一遍开始输入的字符的吗？[/quote] 测试没问题才发给你的，你确定输入了5个吗？[/quote]  是五个。我又看了一遍，发现初始出错的其实是输入的部分，已经改好啦，谢谢~~

user: user-1
content: 引用 3 楼 baidu_38357721 的回复:[quote=引用 2 楼 自信男孩 的回复:] #include<stdio.h> #include<stdlib.h>  struct  node {     char num[20];     struct node * link; }; //typedef node NODE; typedef struct node NODE;  int create(NODE *head,int n); int output(NODE *head); void show(NODE *phead); //void main() int main() {     NODE *head ;     NODE *p;     p=(NODE*)malloc(sizeof(NODE));     p->link=NULL;     head=p;     printf("please enter 5 numbers separated by new lines:\n");     //int create(NODE *head,int n);     create(head,5);     //show(head);     printf("the numbers output:\n");     //int output(NODE *head);     output(head->link); }  int create(NODE *head,int n) {     NODE *p, *prev;      prev = head;     for(int i=0;i<n;i++)     {         p=(NODE*)malloc(sizeof(NODE)) ;         fgets(p->num, 20, stdin);         prev->link = p;         prev = p;     }     return 0; }  void show(NODE *phead) {     NODE *p = phead->link;      while (p) {         printf("%s\n", p->num);         p = p->link;     } }  int output(NODE *head) { #if 1     if (!head)         return 0;      output(head->link);     puts(head->num); #else     if(p!=NULL && p->link!=NULL)     {         //output(NODE* p->link);         output(p->link);     }     if(p!=NULL)         puts(p->num); #endif     return 0; }  供参考～  有问题的地方都做了修改，供参考～  这个没报错，但是不能输出。还有show函数是干什么用的呀，是输出一遍开始输入的字符的吗？[/quote] 测试没问题才发给你的，你确定输入了5个吗？

user: user-0
content: 引用 1 楼 地球太平洋 的回复:typedef node NODE;   改成typedef struct node NODE;  谢谢，但是把下面的也改成 output(p->link); 就不报错了，但是不能输出了呢？

user: user-0
content: 引用 2 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h>  struct  node {     char num[20];     struct node * link; }; //typedef node NODE; typedef struct node NODE;  int create(NODE *head,int n); int output(NODE *head); void show(NODE *phead); //void main() int main() {     NODE *head ;     NODE *p;     p=(NODE*)malloc(sizeof(NODE));     p->link=NULL;     head=p;     printf("please enter 5 numbers separated by new lines:\n");     //int create(NODE *head,int n);     create(head,5);     //show(head);     printf("the numbers output:\n");     //int output(NODE *head);     output(head->link); }  int create(NODE *head,int n) {     NODE *p, *prev;      prev = head;     for(int i=0;i<n;i++)     {         p=(NODE*)malloc(sizeof(NODE)) ;         fgets(p->num, 20, stdin);         prev->link = p;         prev = p;     }     return 0; }  void show(NODE *phead) {     NODE *p = phead->link;      while (p) {         printf("%s\n", p->num);         p = p->link;     } }  int output(NODE *head) { #if 1     if (!head)         return 0;      output(head->link);     puts(head->num); #else     if(p!=NULL && p->link!=NULL)     {         //output(NODE* p->link);         output(p->link);     }     if(p!=NULL)         puts(p->num); #endif     return 0; }  供参考～  有问题的地方都做了修改，供参考～  这个没报错，但是不能输出。还有show函数是干什么用的呀，是输出一遍开始输入的字符的吗？