2 dxskx dxskx 于 2016.09.07 17:40 提问

c语言链表问题,求助啊 20C

#include
#include

typedef struct node
{
char name[100];
int score;
struct node *next;
}StudList;

void CreateStudent(StudList **sl)
{
int n;
StudList s, *tu;
sl = (StudList
)malloc(sizeof(StudList));
tu = sl;
printf("学生人数:");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
s = (StudList *)malloc(sizeof(StudList));
printf("第%d个学生姓名和成绩:", i + 1);
scanf("%s-%d", s->name,&s->score);
//scanf("%d", &s->score);
tu->next = s;
tu = s;
}
tu->next = NULL;
}

void DispList(StudList *L)
{
StudList *p = L->next;
printf(" 名次 姓名 成绩\n");
int i = 1;
while (p != NULL)
{
printf(" %d\t\t", i++);
printf("%s\t\t", p->name);//有错
printf("%d\n", p->score);
p = p->next;
}
}

int main()
{
StudList *n;
printf("建立学生表\n");
CreateStudent(&n);
DispList(&n);

system("pause");
return 0;

}

大神们,我每次运行的时候都提示我注释的地方有异常,谁能帮我调一下,有赏啊,兄弟们

6个回答

waterhexuan
waterhexuan   2016.09.07 19:26

你这代码 问题很多
DispList(&n); &n 是 StudList** 类型 而你的函数 原型 需要 StudList* 类型
scanf("%s-%d", s->name,&s->score); 好像 并不能正确的输入
sl = (StudList)malloc(sizeof(StudList)); 这类型 都不一致 不知道你怎么能编译不报错呢

u011847710
u011847710   2016.09.08 09:43

仅供参考

 #include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    char name[100];
    int score;
    struct node *next;
}StudList;

void CreateStudent(StudList **sl)
{
    int n;
    StudList *s, *tu;//s应该是指针
    *sl = (StudList *)malloc(sizeof(StudList));//此处malloc的内存应该转换为结构体类型指针并赋值给同类型变量,而不是指针的指针
    tu = *sl;
    printf("学生人数:");
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        s = (StudList *)malloc(sizeof(StudList));
        printf("第%d个学生姓名和成绩:", i + 1);
        scanf("%s-%d", s->name,&s->score);//用-没有用,会将你输入的东西全部作为字符串保存到name中
        //scanf("%d", &s->score);
        tu->next = s;
        tu = s;
    }
    tu->next = NULL;
}

void DispList(StudList *L)
{
    StudList *p = L->next;
    printf(" 名次 姓名 成绩\n");
    int i = 1;
    while (p != NULL)
    {
        printf(" %d\t\t", i++);
        printf("%s\t\t", p->name);//有错
        printf("%d\n", p->score);
        p = p->next;
    }
}

int main()
{
    StudList *n;
    printf("建立学生表\n");
    CreateStudent(&n);
    DispList(n);//----
    system("pause");
    return 0;
}

kaixinyixiao33
kaixinyixiao33   2016.09.07 19:28

*pstu = (StudList *)malloc(sizeof(StudList));
malloc开辟空间后返回指针变量,该指针指向所申请的空间地址。StudList s.你定义的s是个变量不是StudList类型的指针。

caozhy
caozhy   Ds   Rxr 2016.09.07 22:37
kingLeeST
kingLeeST   2016.09.07 23:30

推荐你去看一下浙大翁恺老师的C语言课程,其中有链表的讲述

qq_27587417
qq_27587417   2016.09.08 11:39

修改了部分代码,已经可以正常运行了

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node
{
    char name[100];
    int score;
    struct node *next;
}StudList;

void DispList(StudList *L);

void CreateStudent(StudList **sl)
{
    int n;
    StudList *s, *tu;//s改为*s
    *sl = (StudList *)malloc(sizeof(StudList));//需修改
    tu = *sl;//需修改
    printf("学生人数:");
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        s = (StudList*)malloc(sizeof(StudList));
        printf("第%d个学生姓名和成绩:", i + 1);
        scanf("%s%d",s->name,&(s->score));//需修改
        tu->next = s;
        tu = s;
    }
    tu->next = NULL;
}
void DispList(StudList *L)
{
    StudList *p = L->next;
    printf(" 名次 姓名 成绩\n");
    int i = 1;
    while (p != NULL)
    {
        printf(" %d\t\t", i++);
        printf("%s\t\t", p->name);//有错
        printf("%d\n", p->score);
        p = p->next;
    }
}
int main()
{
    StudList *n=NULL;
    printf("建立学生表\n");
    CreateStudent(&n);
    DispList(n);//需修改
    system("pause");
    return 0;
}

运行结果如下:
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
用单链表解决约瑟夫问题 C语言实现
<br /><br /><br />编号为1,2,3,…,n的n个人按顺序针方向围坐一张圆桌旁,每个人手中持有<br />一个密码(正整数)。首先输入一个正整数作为报数上限值m,然后,从第一个人开始按顺序针方向自1开始顺序报数,报到m的人离开桌子,并将他手中的密码作为新的m值,从顺序针方向的下一个就坐在桌旁的人开始重新从1报数,如此下去,直至所有人全部离开桌旁为止。<br />算法思想:<br />用单循环链表来解决这一问题,实现的方法首先要定义链表结点,单循环链表的结点结构与一般单链表的结点结构完全相同,
C语言单链表实现约瑟夫环
1.约瑟夫环问题编号为1,2…n的人按顺时针方向围坐一圈,每个人持有一个密码(正整数)。开始任选一个整数作为报数上限m,从第一个人顺时针自1开始顺时针报数,报到m时停止报数。报到m的人出列,将他的密码作为新的m值,从他顺时针方向上的下一个人开始重新从1报下去,如此下去,直到所有的人全部出列为止。例如,m的初值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4。求出列的顺序。2.问题分析1.
C语言用链表解决约瑟夫问题
C语言用链表解决约瑟夫问题
c语言-报数问题(链表)
13个人围成一圈,从第一个人开始顺序报号 1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。 这是上个学期的作业,现在贴上来,可能对最近学c++和数据结构有用。#include #define PEO 13 #define N 3 struct people {int num; struct people * next; }; int main
链表的简单实现(C语言版)
链表是一种简单的数据结构,其插入和删除的效率比较高链表定义(头文件):#ifndef NODE_H_INCLUDED #define NODE_H_INCLUDEDstruct Node; typedef struct Node * PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; typedef int ElementTy
链表常见面试题-C语言实现
前面的博客已经介绍过了实现链表的一些相关的功能,所以在这里就不对链表多加解释说明了。 对于链表相关面试题这里解释几个有特点的题: 1.对于求查找链表的中间结点,要求只能遍历一次链表? 方式:使用两个指针,一个快指针,一个慢指针,快指针走两步慢指针走一步,这样当快指针指向结尾空指针的时候,慢指针刚好指向中间结点。 图示: 2.查找链表倒数第K个结点要求只能遍历一次链表? 方式:同
C语言单链表的实现及其面试题—完整代码
相关博客链接: C语言实现 单向链表 https://blog.csdn.net/qq_37941471/article/details/72961495 C语言实现单链表面试题—基础篇 https://blog.csdn.net/qq_37941471/article/details/78033970 C语言实现单链表面试题—进阶 https://blog.csdn.net/q...
C 单链表 实现约瑟夫环
list.h #ifndef _List_H #define _List_H typedef int ElementType; struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; //定义一个空链表 List MakeEmpty(); //判断链表是
约瑟夫环单循环链表C语言实现
数据结构问题,编程实现约瑟夫环,原题是严淑敏的《数据结构C语言版题集》实习一的第二题
[C语言]循环链表及出圈问题
使用循环链表解决出圈问题: #include typedef struct cycleLink { int data; struct cycleLink *next; }cNode; //建立循环链表 cNode* createCycleLink(int n) { cNode *current,*p; int i; if(n<1) return NULL;