C 扫描链接列表的输入

C 扫描链接列表的输入,c,linked-list,C,Linked List,我是个编程新手。我写了一个函数来扫描链表的输入。但它不起作用。有人能帮我找到问题所在吗 ListNode *BuildList() { char discard; ListNode *list,*list2=NULL; list = (ListNode*)malloc(sizeof(struct ListNode)); if ((scanf("%d%1[^\n]s", &list->val, &discard)) == 2) {

我是个编程新手。我写了一个函数来扫描链表的输入。但它不起作用。有人能帮我找到问题所在吗

ListNode *BuildList() {
    char discard;
    ListNode *list,*list2=NULL;
    list = (ListNode*)malloc(sizeof(struct ListNode));
    if ((scanf("%d%1[^\n]s", &list->val, &discard)) == 2) {
        list->next = BuildList();
        printf("%d ", list->next->val);
    }
    else
    {
        list->next = NULL;
    }
    return list;
}
ListNode定义为

struct ListNode {
    int val;
    ListNode *next;
};

谢谢大家!

我不得不接受您的代码,并尝试重现您遇到的错误。 您的代码看起来很好,只是由于无法推断
ListNode
的类型而导致编译时错误。 我发现了我认为你是的典型错误:

test.c:11:5: error: unknown type name ‘ListNode’
     ListNode *list,*list2=NULL;
有两种解决方案可供选择:

第一,修改结构定义如下。通过这种方法,您的代码工作起来非常有魅力

typedef struct ListNode {
  int val;
  struct ListNode *next;
} ListNode;
第二,保留结构的定义,但在每个结构变量声明之前加上关键字
struct
。例如;而不是
ListNode*list,*list2=NULL
do
struct ListNode*list,*list2=NULL

我尝试运行您的代码,示例输入和生成的输出如下。我希望这就是你期望你的功能的表现

1 2 3 4 5 6 7 8 9 // <- input
9 8 7 6 5 4 3 2 // <- output

123456789/我不得不接受您的代码,并尝试重现您遇到的错误。
您的代码看起来很好,只是由于无法推断
ListNode
的类型而导致编译时错误。 我发现了我认为你是的典型错误:

test.c:11:5: error: unknown type name ‘ListNode’
     ListNode *list,*list2=NULL;
有两种解决方案可供选择:

第一,修改结构定义如下。通过这种方法,您的代码工作起来非常有魅力

typedef struct ListNode {
  int val;
  struct ListNode *next;
} ListNode;
第二,保留结构的定义,但在每个结构变量声明之前加上关键字
struct
。例如;而不是
ListNode*list,*list2=NULL
do
struct ListNode*list,*list2=NULL

我尝试运行您的代码,示例输入和生成的输出如下。我希望这就是你期望你的功能的表现

1 2 3 4 5 6 7 8 9 // <- input
9 8 7 6 5 4 3 2 // <- output

123456789//欢迎来到堆栈溢出。“不起作用”不是一个有用的问题陈述。请阅读此1)
%d%1[^\n]s“
错误。如果(scanf(%d)”,&list->val)==1{scanf(%*[^\n]);scanf(%*c”);…
@CoolGuy,请尝试
如果此时输入的格式不清楚。欢迎使用堆栈溢出!“不工作”不是一个有用的问题语句。请阅读此1)
%d%1[^\n]s“
错误。如果(scanf(“%d”),&list->val)==1{scanf(“%*[^\n]”);scanf(“%*c”);…
@CoolGuy此时输入的格式不清楚。