c语言链表的输入求指导,纠结了好久

(。。最近学链表做了个程序,结果没有报错,但没法输入,程序一直输出的是我初始化的1234)#include<stdio.h>#include<stdlib.h>typed... (。。最近学链表做了个程序,结果没有报错,但没法输入,程序一直输出的是我初始化的1 2 3 4)
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
int score;
struct student *link;
}STU;

STU *Build(void)
{
STU *a,*temp ,*head;
a=(STU*)malloc(sizeof(STU));

head=a;
temp=head;
temp->score=1;
a=(STU*)malloc(sizeof(STU));
temp->link=a;
temp=a;
temp->score=2;
a=(STU*)malloc(sizeof(STU));
temp->link=a;
temp=a;
temp->score=3;
a=(STU*)malloc(sizeof(STU));
temp->link=a;
temp=a;
temp->score=4;
a->link=NULL;
return head;
}

int main()
{
STU *a;
a=Build();
do
{
scanf("%d",&a->score);
a=a->link;
}
while(a!=NULL);
a=Build();
do
{
printf("%d\n",a->score);
a=a->link;
}
while(a!=NULL);
}
展开
 我来答
百度网友2018359
2018-01-24 · TA获得超过3494个赞
知道大有可为答主
回答量:3486
采纳率:73%
帮助的人:1446万
展开全部
//说实话,感觉你对链表的整体流程不太熟悉.
//一个简单但完整的单向链表
#include <stdio.h>
#include <stdlib.h>

struct node             //定义结构体 
{
    int data;           //存放数据 
    struct node* next;  //指向下一个结点 
};
  
struct node* Create()   //新建结点并初始化 
{
    struct node* n=(struct node*)malloc(sizeof(struct node)*1);
    n->data=-1; 
    n->next=NULL;
    return n;
}
  
int main()
{
    struct node *head=NULL,*p=NULL;
    int in;
    while(1)
    {
        fflush(stdin);                     //清空输入缓冲区 
        scanf("%d",&in);
        if(in==-1) break;                  //如果输入的是-1则表示用户结束输入 
        struct node *new_node;
        new_node=Create();                 //新建结点 
        new_node->data=in;                 //把用户输入的数据存储入新结点中 
        if(head==NULL)                     //如果头结点为空,则把当前新结点当成头结点 
        {
            head=new_node;
            p=head;                        //当前指向为头结点 
        }
        else                               //如果头结点不为空 
        {
            p->next=new_node;              //把上一个结点的next指向新建结点 
            p=p->next;                     //当前指向为新结点 
        }
    }
    p=head;                                //重新指向头结点,以便输出 
    while(1)
    {
        printf("\n%d",p->data);            //输出数据字符串 
        if(p->next==NULL) break;           //如果当前结点没有指向下一个结点,则退出 
        p=p->next;                         //当前指向下一个结点 
    }
    return 0;
}
追问
我刚刚学链表写了个练习程序。。。我想知道为什么我用scanf不能把int型数据输进链表去呢
追答
你写得全乱了, Build函数只是为了给输入的数据造一个空的房子, 结果你一下在build函数中把整个链表全写好了
君知126
2018-01-24 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:80%
帮助的人:22.3万
展开全部
你把中间的main中间的build()去掉。
更多追问追答
追问
你说的是把main函数中第二个a=Build()去掉么,可去掉之后下面用a的时候a就不是头指针了
追答
头指针是很重要的,要专门用一个指针表示
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式