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

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日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22