鱼C论坛

 找回密码
 立即注册
查看: 983|回复: 1

[已解决]请问这个代码哪里错了,谢谢

[复制链接]
发表于 2019-8-31 20:50:46 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 dt3tc 于 2019-8-31 21:42 编辑

题目描述
   
第一行输入两个整数n,m(0<n,m<=1000),分别代表第一个集合和第二个集合的元素的数量。
  
第二行输入n个整数,表示第一个集合中的元素,元素之间用空格隔开。
  
第三行输入m个整数,表示第二个集合中的元素,元素之间用空格隔开。

  两个集合中的元素范围在[0,100000]区间内,集合中不存在重复元素。
输入
第一行,两个整数n,m。
第二行,n个整数,表示序列中的元素。
第三行,m个整数,表示序列中的元素。
输出
一行,从小到大输出交集,保证存在交集。

样例输入

2 3
1 3
1 2 3

样例输出

1 3

提示



我的答案:
main.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#define DEBUG1
  4. #define DEBUG2


  5. int main(void)
  6. {
  7.     int x=0,y=0;
  8. #include "debug1.h"
  9.     int m=0,n=0;
  10.     scanf("%d %d",&m,&n);
  11. #include "debug1.h"
  12.     int a[m];
  13.     int z=0;
  14.     for(int c=0;c<m;c++){
  15.         scanf("%d%*c",&z);
  16.         if(z>0&&z<100000)a[c]=z;
  17.     }
  18. #include "debug1.h"
  19.     int b[n];
  20.     for(int c=0;c<n;c++){
  21.         scanf("%d%*c",&z);
  22.         if(z>0&&z<100000)b[c]=z;
  23.     }
  24. #include "debug1.h"
  25.     typedef struct number Num;
  26. #include "debug1.h"
  27.     struct number{
  28.         Num* previous;
  29.         int value;
  30.         Num* next;
  31.     };
  32. #include "debug1.h"
  33.     Num* first=(Num*)malloc(sizeof(Num));
  34.     Num* current=first;
  35. #include "debug1.h"
  36.     for(int d=0;d<m;d++){
  37.         for(int e=0,f=0;e<n;e++){
  38.             if(a[d]==b[e]){
  39.                 printf("%d ",a[d]);
  40.                 current->value=a[d];
  41.                 current->next=(Num*)malloc(sizeof(Num));
  42.                 current=current->next;
  43.                 current->next=NULL;
  44.             }
  45.         }
  46.     }
  47. #include "debug1.h"
  48.     Num* last=current;
  49.     last->next=NULL;
  50. #include "debug1.h"
  51.     int g=0;
  52.     for(current=first;current!=last;current=current->next){
  53.         if(current->value>(current->next)->value){
  54.             g=(current->next)->value;
  55.             (current->next)->value=current->value;
  56.             current->value=g;
  57.             }
  58. #include "debug2.h"
  59.     }
  60. #include "debug1.h"
  61.     for(current=first;;current=current->next){
  62.         printf("%d",current->value);
  63.         free(current->previous);
  64.         if(current==last)break;
  65.     }
  66.     return 0;
  67. }
复制代码

debug1.h

  1. #ifdef DEBUG1
  2. x++;
  3. printf("x==%d\n",x);
  4. #endif
复制代码

debug2.h

  1. #ifdef DEBUG2
  2. y++;
  3. printf("y==%d\n",y);
  4. #endif
复制代码

makefile

  1. all:main.exe
  2. main.exe:main.c debug1.h debug2.h
  3.         gcc -o main.exe main.c
复制代码

每次关闭DEBUG1宏运行就报错Aborted (核心已转储)
打开它就没事

编译器是msys2 软件源中的 gcc 7.4.0
操作系统 win10 64bit

谢谢
最佳答案
2019-8-31 20:50:47
本帖最后由 superbe 于 2019-9-1 12:40 编辑

#include <stdio.h>
#include <stdlib.h>
//#define DEBUG1
#define DEBUG2


int main(void)
{
    int x=0,y=0;
#include "debug1.h"
    int m=0,n=0;
    scanf("%d %d",&m,&n);
#include "debug1.h"
    int a[m];
    int z=0;
    for(int c=0;c<m;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)a[c]=z;
    }
#include "debug1.h"
    int b[n];
    for(int c=0;c<n;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)b[c]=z;
    }
#include "debug1.h"
    typedef struct number Num;
#include "debug1.h"
    struct number{
        Num* previous;
        int value;
        Num* next;
    };
#include "debug1.h"
    Num* first=(Num*)malloc(sizeof(Num));
    Num* current=first;
#include "debug1.h"
    for(int d=0;d<m;d++){
        for(int e=0,f=0;e<n;e++){
            if(a[d]==b[e]){
                printf("%d ",a[d]);
                current->value=a[d];
                current->next=(Num*)malloc(sizeof(Num));
                current->next->previous=current;    //原代码缺少这一行,previous没有初始化
                current=current->next;
                current->next=NULL;
            }
        }
    }
    printf("\n");
#include "debug1.h"
    Num* last=current->previous;    //上面循环完成后,最后一个Num是多余的,所以回退一个
    last->next=NULL;
#include "debug1.h"
    int g=0;
    for(current=first;current!=last;current=current->next){    //如果不回退,这里排序可能会将最后一个无效Num也包括在内
        if(current->value>(current->next)->value){
            g=(current->next)->value;
            (current->next)->value=current->value;
            current->value=g;
            }
#include "debug2.h"
    }
#include "debug1.h"
    for(current=first;;current=current->next){
        printf("%d ",current->value);
        //free(current->previous);    //原代码因为previous没有初始化,所以这里可能出问题,改成下面一行
        if(current!=first) free(current->previous);    //第1个Num没有previous所以判断一下
        if(current==last)break;
    }
    free(current);    //最后一个Num没有释放,单独释放一下
    return 0;
}

最佳答案

查看完整内容

#include #include //#define DEBUG1 #define DEBUG2 int main(void) { int x=0,y=0; #include "debug1.h" int m=0,n=0; scanf("%d %d",&m,&n); #include "debug1.h" int a[m]; int z=0; for(int c=0;c0&&zprevious=current; //原代码缺少这一行,previous没有初始化 current=current->next; current->next=NULL; } } ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-31 20:50:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-9-1 12:40 编辑

#include <stdio.h>
#include <stdlib.h>
//#define DEBUG1
#define DEBUG2


int main(void)
{
    int x=0,y=0;
#include "debug1.h"
    int m=0,n=0;
    scanf("%d %d",&m,&n);
#include "debug1.h"
    int a[m];
    int z=0;
    for(int c=0;c<m;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)a[c]=z;
    }
#include "debug1.h"
    int b[n];
    for(int c=0;c<n;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)b[c]=z;
    }
#include "debug1.h"
    typedef struct number Num;
#include "debug1.h"
    struct number{
        Num* previous;
        int value;
        Num* next;
    };
#include "debug1.h"
    Num* first=(Num*)malloc(sizeof(Num));
    Num* current=first;
#include "debug1.h"
    for(int d=0;d<m;d++){
        for(int e=0,f=0;e<n;e++){
            if(a[d]==b[e]){
                printf("%d ",a[d]);
                current->value=a[d];
                current->next=(Num*)malloc(sizeof(Num));
                current->next->previous=current;    //原代码缺少这一行,previous没有初始化
                current=current->next;
                current->next=NULL;
            }
        }
    }
    printf("\n");
#include "debug1.h"
    Num* last=current->previous;    //上面循环完成后,最后一个Num是多余的,所以回退一个
    last->next=NULL;
#include "debug1.h"
    int g=0;
    for(current=first;current!=last;current=current->next){    //如果不回退,这里排序可能会将最后一个无效Num也包括在内
        if(current->value>(current->next)->value){
            g=(current->next)->value;
            (current->next)->value=current->value;
            current->value=g;
            }
#include "debug2.h"
    }
#include "debug1.h"
    for(current=first;;current=current->next){
        printf("%d ",current->value);
        //free(current->previous);    //原代码因为previous没有初始化,所以这里可能出问题,改成下面一行
        if(current!=first) free(current->previous);    //第1个Num没有previous所以判断一下
        if(current==last)break;
    }
    free(current);    //最后一个Num没有释放,单独释放一下
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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