鱼C论坛

 找回密码
 立即注册
查看: 915|回复: 8

[已解决]单链表1的相关问题

[复制链接]
发表于 2021-2-9 20:16:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Lonerwcq 于 2021-2-10 15:48 编辑

是关于《带你学C带你飞》单链表1的问题

为什么在visual studio 2019里面画圈圈这里要加"&"才能正常运行
InkedSnipaste_2021-02-09_00-39-28_LI.jpg
我看小甲鱼课程里面不用"&"就能正常运行了啊
我自己理了下思路还是想不明白:
不加&的情况:
传入num,即它所指的那个向堆申请的结构体的地址,
然后getInput函数对地址进行操作,就是由结构体的地址查找其成员data,然后格式化输入
感觉逻辑上没问题


可在vs 2019里面不加"&"的话运行就会成这样:
R4ZMH8[)BZI5CJ7LT_K$A18.png
输入一个数字就直接中断了,我也不知道是为什么

全部的代码如下:
#include <stdio.h>
#include <stdlib.h>

struct Num
{
        int data;
        struct Num *next;
};

void addnum(struct Num **);
void getInput(struct Num *);
void printnum(struct Num *);
void release(struct Num *);

int main(void)
{
        struct Num *head = NULL;
        char ch;

        while (1)
        {
                printf("是否需要录入数字?(Y/N):");
                do
                {
                        ch = getchar();
                } while (ch != 'Y' && ch != 'N');

                if (ch == 'Y')
                {
                        addnum(&head);
                }
                else
                {
                        break;
                }
        }

        printf("是否需要打印数字?(Y/N):");
        do
        {
                ch = getchar();
        } while (ch != 'Y' && ch != 'N');

        if (ch == 'Y')
        {
                printnum(head);
        }

        release(head);

        return 0;
}

void addnum(struct Num **head)
{
        struct Num *num;

        num = (struct Num *)malloc(sizeof(struct Num));
        if (num == NULL)
        {
                printf("内存分配失败");
                exit(1);
        }

        getInput(&num);

        num->next = *head;//解引用一次是head存放的值的地址,也就是结构体的地址,两次才是值
        *head = num;
}

void getInput(struct Num *num)
{
        printf("请输入数字:");
        scanf("%d", num->data);
}

void printnum(struct Num *head)
{
        struct Num *num;
        int count = 1;

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

void release(struct Num *head)
{
        struct Num *temp;
        while (head != NULL)
        {
                temp = head->next;
                free(head);
                head = temp;
        }

        printf("内存已释放\n");
}
最佳答案
2021-2-10 17:15:20
本帖最后由 李京 于 2021-2-10 17:17 编辑


你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,

小甲鱼没有加是因为用的是字符串,,不用加
你输入的是int,要加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 20:23:34 | 显示全部楼层
请用图床上传图片
https://imgchr.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 22:28:57 | 显示全部楼层
你的图片没发出来,新鱼友没有上传图片的权限
这里有楼上老哥提到的链接的使用教程:

【技巧】新鱼油怎么传图片?
https://fishc.com.cn/thread-168190-1-1.html
(出处: 鱼C论坛)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 12:04:33 | 显示全部楼层
画圈圈是哪里?

最好是把代码弄出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 15:43:32 | 显示全部楼层
qiuyouzhi 发表于 2021-2-9 20:23
请用图床上传图片
https://imgchr.com

改好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 15:44:05 | 显示全部楼层
李京 发表于 2021-2-10 12:04
画圈圈是哪里?

最好是把代码弄出来

编辑好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 15:44:48 | 显示全部楼层
昨非 发表于 2021-2-9 22:28
你的图片没发出来,新鱼友没有上传图片的权限
这里有楼上老哥提到的链接的使用教程:
【技巧】新鱼油怎么 ...

编辑好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 17:15:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 李京 于 2021-2-10 17:17 编辑


你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,

小甲鱼没有加是因为用的是字符串,,不用加
你输入的是int,要加

评分

参与人数 1荣誉 +5 鱼币 +4 贡献 +3 收起 理由
Lonerwcq + 5 + 4 + 3 感谢!!!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-10 20:31:35 | 显示全部楼层
李京 发表于 2021-2-10 17:15
你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,

哇原来如此,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表