月无涯 发表于 2019-8-7 13:17:34

结构体接收变量的问题求助!!

//插入数字,并按照从小大排列
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Arr //定义结构体
{
        int num_;//存放数字
        struct Arr* next;//指向下一个
};

void getInput(struct Arr* num);//接收数字
void getInput(struct Arr* num)
{
        printf("请输入整数:");
        scanf("%d", num->num_);//此处报错!!!!!写入位置冲突
}

struct Arr* search(struct Arr* nums, int target);//寻找插入位置
struct Arr* search(struct Arr* nums, int target)
{
        struct Arr* num;
        num = nums;

        while (num->next != NULL && num->next->num_ < target)
        {
                num = num->next;
        }

        return num;
}

void insert(struct Arr** nums);//插入新结构体
void insert(struct Arr** nums)
{
        struct Arr* num, * temp;

        num = (struct Arr*)malloc(sizeof(struct Arr));//新结构体分配内存空间
        if (num == NULL)
        {
                printf("内存分配失败!");
                exit(1);
        }

        getInput(num);//新结构体接收数字

        if (*nums != NULL)//插入
        {
                temp = search(*nums, num->num_);
                num->next = temp->next;
                temp->next = num;
        }
        else
        {
                *nums = num;
                num->next = NULL;
        }
}

void printNum(struct Arr* nums);//打印
void printNum(struct Arr* nums)
{
        struct Arr* num;
        num = nums;

        while (num != NULL)
        {
                printf("%d\n", num->num_);
                num = num->next;
        }
}

int main()
{
        struct Arr* nums = NULL;
       
        insert(&nums);
       
        printNum(nums);

        return 0;
}

蓝色标记的位置出错,麻烦大佬给看看为什么这样

ba21 发表于 2019-8-7 13:17:35

printf("", 变量名)
scanf("", 地址)
scanf("%d", &num->num_);//此处报错!!!!!写入位置冲突

AmosAlbert 发表于 2019-8-7 16:21:11

scanf("", 地址)也就是scanf("", &变量名)

月无涯 发表于 2019-8-7 16:40:46

ba21 发表于 2019-8-7 13:33
printf("", 变量名)
scanf("", 地址)
scanf("%d", &num->num_);//此处报错!!!!!写入位置冲突

我形参num是指针啊

月无涯 发表于 2019-8-7 16:41:27

AmosAlbert 发表于 2019-8-7 16:21
scanf("", 地址)也就是scanf("", &变量名)

我的形参num是指针 不用取地址的

人造人 发表于 2019-8-7 18:10:33

月无涯 发表于 2019-8-7 16:41
我的形参num是指针 不用取地址的

形参是指针 不用取地址?
谁说的?

月无涯 发表于 2019-8-7 18:24:39

人造人 发表于 2019-8-7 18:10
形参是指针 不用取地址?
谁说的?

额 它这个指针不是指向结构体的地址吗。。为啥还取地址啊

bin554385863 发表于 2019-8-7 18:36:17

月无涯 发表于 2019-8-7 18:24
额 它这个指针不是指向结构体的地址吗。。为啥还取地址啊

形参num是指针没错,可这不代表num->num_也是指针,懂了么.回头再好好有关结构体和指针的知识!
num是指针
num->num_相当于(*num).num_而在你的结构体
struct Arr //定义结构体
{
      int num_;//存放数字
      struct Arr* next;//指向下一个
};之中num_是个整形变量,这也就导致num->num_也是个整形变量,因此使用scanf给他赋值必须取地址,Are you ok(雷军)?
要写成scanf("%d", &num->num_);

月无涯 发表于 2019-8-7 18:37:41

ba21 发表于 2019-8-7 13:33
printf("", 变量名)
scanf("", 地址)
scanf("%d", &num->num_);//此处报错!!!!!写入位置冲突

我知道了 我以为我传的是个数组感谢!

月无涯 发表于 2019-8-7 18:38:26

AmosAlbert 发表于 2019-8-7 16:21
scanf("", 地址)也就是scanf("", &变量名)

我知道了 我以为我传的是个数组感谢!

月无涯 发表于 2019-8-7 18:39:11

bin554385863 发表于 2019-8-7 18:36
形参num是指针没错,可这不代表num->num_也是指针,懂了么.回头再好好有关结构体和指针的知识!
num是指针
...

我知道了 我以为我传的是个整型数组感谢!

月无涯 发表于 2019-8-7 18:40:04

人造人 发表于 2019-8-7 18:10
形参是指针 不用取地址?
谁说的?

我知道了 我以为我传的是个数组感谢!

bin554385863 发表于 2019-8-7 18:44:27

月无涯 发表于 2019-8-7 18:40
我知道了 我以为我传的是个数组感谢!

没事,这种错误犯一次就记住了{:10_256:}
页: [1]
查看完整版本: 结构体接收变量的问题求助!!