两岸上书 2023-10-20 22:32 采纳率: 50%
浏览 15

c语言习题,链表去重

img

这样的一道问题


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct LNode
{
    char address[5];
    int key;
    char next[5];
}LNode;
int main()
{
    char ch[5];
    int n;
    int i,j;
    LNode list_i[100];
    LNode list_o[100];
    scanf("%s %d", ch, &n);
    for (i = 0; i < n; i++)
    {
        scanf("%s", list_i[i].address);
        scanf("%d", &list_i[i].key);
        scanf("%s", list_i[i].next);
    }

    for (i = 0; i < n; i++)
    {
        if (strcmp(ch, list_i[i].address) == 0)
        {
            LNode t = list_i[0];
            list_i[0] = list_i[i];
            list_i[i] = t;
        }
    }
    for (i = 0; i < n-1; i++)
    {
        for (j = i+1; j < n; j++)
        {
            if (strcmp(list_i[i].next, list_i[j].address) == 0)
            {
                LNode t = list_i[i + 1];
                list_i[i + 1] = list_i[j];
                list_i[j] = t;
            }
        }
    }

    list_o[0] = list_i[0];
    int m = 0;
    int flag = 1;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m+1; j++)
        {
            if (abs(list_i[i].key) == abs(list_o[j].key))
            {
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            list_o[m + 1] = list_i[i];
            m++;
        }
        flag = 1;
    }

    for (i = 0; i < m+1; i++)
    {
        if (i == m)
        {
            strcpy(list_o[i].next, "-1");
            break;
        }
        strcpy(list_o[i].next, list_o[i + 1].address);
    }

    printf("%d\n", m+1);
    for (i = 0; i < m+1; i++)
    {
        printf("%s %d %s\n", list_o[i].address,list_o[i].key,list_o[i].next);
    }
    return 0;
}

我使用visual stdio写了这样的代码,在运行示例时

img


产生了这样的错误
但是我把代码复制粘贴到devc++上之后再次测试则没有问题,请打家帮忙看看问题出在哪里了

  • 写回答

3条回答 默认 最新

  • 柯本 2023-10-20 23:11
    关注

    程序至少有一个基本概念的(逻辑)错,C的字串,后必须有个\0结尾,所以它的长度必须是实际字符数+1,否则要下标溢出的,而下标溢出的结果是不可预料的。
    你的所有相关下标不能是[5],至少要[6]的,另外,输入既然是非负的5位整数,为什么不直接用int?输出时可用%05d保证前导的0的

    评论

报告相同问题?

问题事件

  • 创建了问题 10月20日