不管怎么插入数据,都还是空链表,为什么

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果
#include  
#include 
#include 

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

int input_Num(struct Num *num)
{
    printf("请输入一个数字: ");
    scanf("%d", &num->num);
    
    return num->num;
}

void insert_Num(struct Num **n)
{
    struct Num *num;
    struct Num *ptr;
    struct Num *current;
    int temp;
    
    current = *n;
    
    
    num = (struct Num *)malloc(sizeof(struct Num));
    if (num == NULL)
    {
        printf("内存分配失败...\n");
        exit(1);
    }
    
    temp = input_Num(num); 
    
    
    if (current != NULL)
    {
        while (current->num < temp && current != NULL)
        {
            ptr = current;
            current = current->next;
        }
        num->next = current;
        ptr->next = num;
        
    }
    
    else
    {
        num->next = NULL;
        current = num;
    }
    
}

void printRecord(struct Num *n)
{
    struct Num *record;
    
    record = n;

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

} 

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

int main(void)
{
    struct Num *n = NULL;
    char ch;
    
    while (1)
    {
        printf("是否录入数据(Y/N): ");
        do
        {
            ch = getchar();
            
        } while (ch != 'Y' && ch != 'N');
        
        if (ch == 'N')
        {
            break;
        }
        
        else
        {
            insert_Num(&n);
        }
        
    } 
    printRecord(n);
    releaseRecord(&n); 
    return 0;
}

你没有给n分配空间啊
给你改个有头节点的

#include <stdio.h> 
#include <stdlib.h>
#include <ctype.h>
 
struct Num
{
    int num;
    struct Num *next;
};
 
int input_Num(struct Num *num)
{
    printf("请输入一个数字: ");
    scanf("%d", &num->num);
    num->next = NULL;
    return num->num;
}
 
void insert_Num(struct Num **n)
{
    struct Num *p;
    struct Num *current;
    int temp;
    
    if(*n == NULL)
    {
        *n = (struct Num *)malloc(sizeof(struct Num));
        (*n)->next = NULL;
    }
    current = (*n);
    p = (struct Num *)malloc(sizeof(struct Num));
    if (p == NULL)
    {
        printf("内存分配失败...\n");
        exit(1);
    }
    input_Num(p);
    while(current->next != NULL)
    {
        if(p->num < current->next->num)
            current = current->next;
        else
        {
            p->next = current->next;
            current->next = p;
            break;
        }
    }
    if(current->next == NULL)
        current->next = p;
}
 
void printRecord(struct Num *n)
{
    struct Num *record;
    
    record = n->next;
 
    while (record != NULL)
    {
        printf("%d ", record->num);
        record = record -> next;
    }
 
} 
 
void releaseRecord(struct Num **n)
{
    struct Num *temp;
    
    while (*n != NULL)
    {
        temp = *n;
        *n = (*n)->next;
        free(temp);
    }
}
 
int main(void)
{
    struct Num *n = NULL;
    char ch;
    
    while (1)
    {
        printf("是否录入数据(Y/N): ");
        do
        {
            ch = getchar();
            
        } while (ch != 'Y' && ch != 'N');
        
        if (ch == 'N')
        {
            break;
        }
        
        else
        {
            insert_Num(&n);
        }
        
    } 
    printRecord(n);
    releaseRecord(&n); 
    return 0;
}

头节点也需要分配内存,只要是指针就需要指向一片内存,可以动态分配,也可以指向现有的变量。
你这里的头节点n就没有给他指向过一片内存,你可以打印n的值看一看,里面肯定还是空指针null。

问题应该出在while循环中和下边几行。自己做一下测试或者用笔画一下。考虑第一次输入2,第二次输入5的情况。
还有,while循环的两个条件应该换一下位置,否则可能会导致访问空指针

题主的代码修改如下,不需要增加结点,改动处见注释,供参考:

#include <stdio.h> 
#include <stdlib.h>
#include <ctype.h>
 
struct Num
{
    int num;
    struct Num *next;
};
 
int input_Num(struct Num *num)
{
    printf("请输入一个数字: ");
    scanf("%d", &num->num);
    
    return num->num;
}
 
void insert_Num(struct Num **n)
{
    struct Num *num = NULL;
    struct Num *ptr = NULL;
    struct Num *current = (*n); //修改 //current = *n;
    int    temp;

    num = (struct Num *)malloc(sizeof(struct Num));
    if (num == NULL)
    {
        printf("内存分配失败...\n");
        exit(1);
    }
    
    temp = input_Num(num); 
    
    
    if (current != NULL)
    {
        while (current != NULL && current->num < temp)//修改
        {
            ptr = current;
            current = current->next;
        }
        if (!ptr){               //修改
            num->next = current; //修改
            (*n) = num;          //修改
        }
        else{
            num->next = current;
            ptr->next = num;
        }
    }
    else
    {
        num->next = NULL;
        (*n) = num;    //修改
        //current = num;
    }
    
}
 
void printRecord(struct Num *n)
{
    struct Num *record;
    
    record = n;
 
    while (record != NULL)
    {
        printf("%d ", record->num);
        record = record -> next;
    }
 
} 
 
void releaseRecord(struct Num **n)
{
    struct Num *temp;
    
    while (*n != NULL)
    {
        temp = *n;
        *n = (*n)->next;
        free(temp);
    }
}
 
int main(void)
{
    struct Num *n = NULL;
    char ch;
    
    while (1)
    {
        printf("是否录入数据(Y/N): ");
        do
        {
            ch = getchar();
            
        } while (ch != 'Y' && ch != 'N');
        
        if (ch == 'N')
        {
            break;
        }
        
        else
        {
            insert_Num(&n);
        }
    } 
    printRecord(n);
    releaseRecord(&n); 
    return 0;
}