2301_77065791 2023-10-10 08:50 采纳率: 0%
浏览 30

语言为什么在主函数中调用函数之后没有输出了

如图,主函数中调用其他函数之后,前面的操作都是正常的,但是,调用函数之后就没有输出了

img

#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct Node
{
    ElemType data;
    struct Node* next;
}Node,*LinkList;

void InitList(LinkList *L)
{
    *L=(LinkList)malloc(sizeof(Node));
    (*L)->next=NULL;
}

void CreateFromHead(LinkList L)
{
    Node *s,*r;
    r=L;
    ElemType c;
    int flag=1;
    printf("请输入表中元素(示例:1 2 3 4 $):");
    while(flag){
        c=getchar(); 
        if(c!='$'){
               if(c!=' '){
                     s=(Node*)malloc(sizeof(Node));
                     s->data=c;
                     r->next=s;
                     r=s;
                     }
        } 
        else {flag=0;
            r->next=NULL;}
        
    } 
}

Node *Locate(LinkList L,ElemType key)
{
    Node *p;
    p=L->next;
    while(p!=NULL)
        if(p->data!=key)
            p=p->next;
        else break;
    return p;
}

int ListLength(LinkList L)
{
    Node *p;
    p=p->next;
    int j=0;
    while(p!=NULL)
    {
        p=p->next;
        j++;    
    }
    return j;
}

int InsList(LinkList L,int i,ElemType e)
{
    Node *pre,*s;
    int k;
    if(i<=0) return ERROR;
    pre=L;
    k=0;
    while(pre!=NULL&&k<i-1)
    {
        pre=pre->next;
        k=k+1;
    }
    if(pre=NULL)
    {
        printf("插入位置不合理!");
        return ERROR;
    }
    s=(Node*)malloc(sizeof(Node));
    s->data=e;s->next=pre->next;
    pre->next=s;
    return OK;
}

void DelList(LinkList L,int i,ElemType *e)
{
    Node *pre,*r;
    int k;
    pre=L;
    k=0;
    while(pre->next!=NULL&&k<i-1)
    {
        pre=pre->next;
        k=k+1;
    }
    if(pre->next=NULL)
    {
        printf("删除结点位置不合理!");
        return ;
    }
    r=pre->next;
    pre->next=r->next;
    *e=r->data;
    free(r);
    return ; 
}

LinkList MergeLinkList(LinkList LA,LinkList LB)
{
    Node *pa,*pb,*r;
    LinkList LC;
    pa=LA->next;
    pb=LB->next;
    LC=LA;
    LC->next=NULL;
    r=LC;
    while(pa!=NULL&&pb!=NULL)
    {
        if(pa->data<=pb->data)
            {r->next=pa;r=pa;pa=pa->next;}
        else
            {r->next=pb;r=pb;pb=pb->next;}
    }
    if(pa) r->next=pa;
    else r->next=pb;
    free(LB);
    return(LC);
}

void Output(LinkList L)
{
    Node *p;    
    p=L->next;
    if(p==NULL){
        printf("链表为空"); 
        return;
    }
    printf("单链表中的元素为:");
    while(p!=NULL){
        printf("%c ",p->data);
        p=p->next;
    }
    printf("\n");
}

int main()
{
    LinkList L1,L2,L3;
    int opt,n,leng;
    ElemType key;
    Node *loca;
    int k,a;
    InitList(&L1);
    CreateFromHead(L1);
    Output(L1);
    printf("************************************************\n");
    printf("************************************************\n");
    printf("**                 菜单                       **\n");
    printf("************************************************\n");
    printf("**  1.查找值为key的结点                       **\n");
    printf("**  2.求单链表长度                            **\n");
    printf("**  3.插入数据元素到单链表具体位置            **\n");
    printf("**  4.删除单链表特定位置的元素                **\n");
    printf("**  5.将两个单链表合并为一个递增有序的单链表  **\n");
    printf("************************************************\n");
    printf("************************************************\n");
    printf("请输入你想要进行的操作序号:\n"); 
    scanf("%d",&opt);
    switch (opt)
    {
        case 1:{
            printf("请输入你要查找的值key:\n");
            scanf("%d",&key);
            loca=Locate(L1,key);
            printf("key的位置序号为:%d\n",loca->data);
            break;
        }
        case 2:{
            leng=ListLength(L1);
            printf("该链表长度为:%d\n",leng);
            break;
        }
        case 3:{
            printf("请输入要插入的结点位置:\n");
            scanf("%d",&k);
            printf("请输入要插入的值:\n");
            scanf("%d",&a);
            InsList(L1,k,a);
            printf("新列表为:");
            Output(L1);
            break;
        }
        case 4:{
            ElemType *e;
            printf("请输入要删除的结点位置:\n");
            scanf("%d",&k);
            DelList(L1,k,e);
            printf("新列表为:\n");
            Output(L1);
            printf("被删除的元素为:%d\n",e);
            break;
        }
        case 5:{
            LinkList L1,L2,L3;
            printf("请输入另一个想要合并的顺序表:");
            CreateFromHead(L2);
            Output(L2);
            InitList(&L3);
            L3=MergeLinkList(L1,L2);
            printf("合并后的顺序表为:");
            printf("新列表为:");
            Output(L3);
            break;
        }        
    }
    return 0;
}


  • 写回答

4条回答 默认 最新

  • yun6853992 2023-10-10 09:23
    关注

    代码有一些问题,而且很基础的问题,建议你可以把关键模块提出来,先以最简单demo的方式一步步调通
    看到的问题 比如: 指针变量没有初始化,函数要传参的变量没有初始化,判等符号和赋值符号混用等问题。。。

    img

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 10月10日

悬赏问题

  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥60 远程协助启动mysql服务
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题