鱼C论坛

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

[已解决]c代码输出是乱码,请各位大神帮忙看看是哪有问题

[复制链接]
发表于 2021-7-11 12:10:39 | 显示全部楼层 |阅读模式
2鱼币
题目是
有两个连边a和b,设结点中包含学号、姓名。从a链表中删去与b链表中相同学号的那些结点
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

typedef struct Student
{
        int num;
        char name[MAXSIZE];
        struct Student *next;
}Student;

int n;

Student* CreateLink(Student *P)
{
        Student *P1,*head;
        n=0;
        
        P=P1=(Student *)malloc(sizeof(Student));
        head=NULL;
        printf("input Number:");
        scanf("%d",&P->num);
        getchar();
        if(P->num != 0)
        {
                printf("input Name:");
                scanf("%s",P->name);
                getchar();
        }
        while(P->num != 0)
        {
                n++;
                if(n==1)
                {
                        head=P;
                }
                else
                {
                        P1->next=P;
                }
                P1=P;
                P=(Student *)malloc(sizeof(Student));
                printf("input Number:");
                scanf("%d",&P->num);
                getchar();
                if(P->num != 0)
                {
                        printf("input Name:");
                        scanf("%s",P->name);
                        getchar();
                }
        }
        P1->next=NULL;
        return (head);
}
Student* Del(Student *A,Student *B)
{
        Student *head,*P;
        head=A;
        for(;B != NULL;B->next);
        {
                while(A)
                {
                        if(A->num == B->num)
                        {
                                if(A==head)
                                        head=A->next;
                                else 
                                {
                                P->next=A->next;
                                A=A->next;
                                }
                        }
                        else
                        {
                                P=A;
                                A=A->next;
                        }
                }
        }
        return (head);
}

void print(Student *P)
{
        Student *head;
        head=P;
        while(head!= NULL)
        {
                printf("No. %d   Name: %s\n",head->num,head->name);
                head=head->next;
        }
}

int main()
{
        Student A,B;
        CreateLink(&A);
        printf("The Graph A is:\n");
        print(&A);
        CreateLink(&B);
        printf("The Graph B is:\n");
        print(&B);
        Del(&A,&B);
        printf("The New Graph A is:\n");
        print(&A);
        return 0;
}


最佳答案
2021-7-11 12:10:40
我测试了下,创建链表那没问题,
有问题应该是以下两个地方:
①return (head);
②CreateLink(&A);
即,参数返回或者传参的问题。
fffsfs.jpg

最佳答案

查看完整内容

我测试了下,创建链表那没问题, 有问题应该是以下两个地方: ①return (head); ②CreateLink(&A); 即,参数返回或者传参的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 12:10:40 | 显示全部楼层    本楼为最佳答案   
我测试了下,创建链表那没问题,
有问题应该是以下两个地方:
①return (head);
②CreateLink(&A);
即,参数返回或者传参的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 12:27:05 | 显示全部楼层
你的编译器什么提示也没有?那一定要换一个好一点的编译器
$ gcc -g -Wall -o main main.c
main.c: In function ‘Del’:
main.c:60:25: warning: statement with no effect [-Wunused-value]
   60 |         for(;B != NULL;B->next);
      |                        ~^~~~~~
main.c:60:9: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation]
   60 |         for(;B != NULL;B->next);
      |         ^~~
main.c:61:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’
   61 |         {
      |         ^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 12:27:46 From FishC Mobile | 显示全部楼层
人造人 发表于 2021-7-11 12:27
你的编译器什么提示也没有?那一定要换一个好一点的编译器

一看就是古董vc60
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 12:28:05 | 显示全部楼层
wp231957 发表于 2021-7-11 12:27
一看就是古董vc60

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 12:46:40 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

typedef struct Student
{
        int num;
        char name[MAXSIZE];
        struct Student *next;
}Student;

int n;

Student* CreateLink(Student *P)
{
        Student *P1,*head;
        n=0;

        P=P1=(Student *)malloc(sizeof(Student));
        head=NULL;
        printf("input Number:");
        scanf("%d",&P->num);
        getchar();
        if(P->num != 0)
        {
                printf("input Name:");
                scanf("%s",P->name);
                getchar();
        }
        while(P->num != 0)
        {
                n++;
                if(n==1)
                {
                        head=P;
                }
                else
                {
                        P1->next=P;
                }
                P1=P;
                P=(Student *)malloc(sizeof(Student));
                printf("input Number:");
                scanf("%d",&P->num);
                getchar();
                if(P->num != 0)
                {
                        printf("input Name:");
                        scanf("%s",P->name);
                        getchar();
                }
        }
        P1->next=NULL;
        return (head);
}
Student* Del(Student *A,Student *B)
{
        Student *head,*P;
        head=A;
        //for(;B != NULL;B->next);
        for(;B != NULL; B = B->next)
        {
                while(A)
                {
                        if(A->num == B->num)
                        {
                                if(A==head)
                                        head=A->next;
                                else 
                                {
                                        P->next=A->next;
                                        A=A->next;
                                }
                        }
                        else
                        {
                                P=A;
                                A=A->next;
                        }
                }
        }
        return (head);
}

void print(Student *P)
{
        Student *head;
        head=P;
        while(head!= NULL)
        {
                printf("No. %d   Name: %s\n",head->num,head->name);
                head=head->next;
        }
}

int main()
{
        Student A,B;
        CreateLink(&A);
        printf("The Graph A is:\n");
        print(&A);
        CreateLink(&B);
        printf("The Graph B is:\n");
        print(&B);
        Del(&A,&B);
        printf("The New Graph A is:\n");
        print(&A);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 13:43:09 | 显示全部楼层
wp231957 发表于 2021-7-11 12:27
一看就是古董vc60

这不是我之前那个出问题的老古董吗
至今没搞明白啊哈哈  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-11 13:46:18 From FishC Mobile | 显示全部楼层
Gacy 发表于 2021-7-11 13:43
这不是我之前那个出问题的老古董吗
至今没搞明白啊哈哈

vc60不应该被使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-12 21:45:36 | 显示全部楼层
wp231957 发表于 2021-7-11 13:46
vc60不应该被使用

那为什么它还存在呢 猫猫头
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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