旋风0级 发表于 2021-4-20 20:39:06

求教,这样写返回的pt->score像是个地址,哪里出错了,请高手指点

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(Stu)    //宏替换 LEN代表struct student
                                                                          //类型数据的长度 sizeof是 求字节数运算符

typedef struct Student
{
        long num;
        float score;
        struct Student* next;
}Stu;

int n;//n为全局变量,本文件中各模块均可使用它
Stu* creat(void)   //定义结构函数,此函数返回一个指向 链表头的指针
{
        Stu* head;
        Stu* p1, * p2;
        n = 0;
        p1 = p2 = (Stu*)malloc(LEN);    //开辟一个新单元malloc需要头文件#include(stdlib.h)内存分配函数
        scanf("%ld,%f", &p1->num, &p1->score); //输入第一个学生的学号和成绩
        head = NULL;

        while (p1->num != 0)
        {
                //n++;
                n = n + 1;
                if (n == 1)
                {
                        head = p1;
                }
                else
                {
                        p2->next = p1;
                }
               
                p2 = p1;
                p1 = (Stu*)malloc(LEN);   //开辟动态存储区,把起始地址赋给p1
                scanf("%ld,%f", &p1->num, &p1->score);   //输入其他学生的学号和成绩
                //char c;
                //while ((c = getchar()) != '\n');
        }
        p2->next = NULL;
        return head;
}
int main()
{
        Stu* pt;
        pt = creat();//函数返回链表第一个结点的地址
        printf("\n num:%ld\n score:%5.1f\n", pt->num, pt->score);//输出第一个结点的成员值
        //free(Stu);//释放结构体
        return 0;
}

旋风0级 发表于 2021-4-20 21:05:06

己解决,,,是输入法的问题{:5_109:}个人失误

yuxijian2020 发表于 2021-4-20 21:10:12

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(Stu)    //宏替换 LEN代表struct student
//类型数据的长度 sizeof是 求字节数运算符

typedef struct Student
{
    long num;
    float score;
    struct Student* next;
}Stu;

int n;//n为全局变量,本文件中各模块均可使用它
Stu* creat(void)   //定义结构函数,此函数返回一个指向 链表头的指针
{
    Stu* head;
    Stu* p;         /*------------不需要那么多指针---------------*/
    n = 0;
    p = (Stu*)malloc(LEN);    //开辟一个新单元malloc需要头文件#include(stdlib.h)内存分配函数
    if (!p)
    {
      printf_s("内存申请失败\n");
      return NULL;
    }

    scanf_s("%ld%*c%f", &p->num, &p->score); //输入第一个学生的学号和成绩
    head = NULL;

    while (p->num != 0)
    {
      n = n + 1;
      if (n == 1)
            head = p;/*------------第一次时赋值给head---------------*/

      p = p->next;/*------------以后每次指向自身的下个节点---------------*/

      p = (Stu*)malloc(LEN);   //开辟动态存储区,把起始地址赋给p1
      if (!p)
      {
            printf_s("内存申请失败\n");
            return head;
      }

      scanf_s("%ld%*c%f", &p->num, &p->score);   //输入其他学生的学号和成绩
    }
   
    return head;
}
int main()
{
    Stu* pt;
    pt = creat();//函数返回链表第一个结点的地址
    printf("\n num:%ld\n score:%5.1f\n", pt->num, pt->score);//输出第一个结点的成员值
    return 0;
}
页: [1]
查看完整版本: 求教,这样写返回的pt->score像是个地址,哪里出错了,请高手指点