You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组相等性校验及整数数组替换字符'X'失败问题排查

问题排查:数组匹配替换未生效的问题

问题描述

对比两个数组,当pirolito数组中的元素与retardado数组中的元素相等时,将该位置的整数替换为字符'X'。但编译运行后无报错,仅输出大量空白后打印两个数组,对应匹配位置并未替换为'X'。

原代码

// Igualdade entre listas --> Teste 1 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define BTT 10 


void create_pirolito(int list[BTT]);
void create_retardado(int list[BTT]);
void compare_lists(int list1[BTT], int list2[BTT]);
void prints_both(int list1[BTT], int list2[BTT]);



void create_pirolito(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
        list[i]=rand()%10;
    }
}



void create_retardado(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
         list[i]=rand()%20;
    }
}



void prints_both(int list1[BTT], int list2[BTT])
{
    int i=0;
    int j=0;
    for(int z=0; z<BTT; z++)
    {
      printf("(%2d  %2d)\n", list1[i], list2[j]);
      i++;
      j++;
    }
}



void compare_lists(int list1[BTT], int list2[BTT])
{
    char x='X';
    for(int i=0; i<BTT; i++)
    {
        for(int j=0; j<BTT; j++)
        {
            if(list1[i]==list2[j])
            {
                list1[i]==(int)(x);
            }
        }
        printf("\n");
    }
}



int main()
{
    int pirolito[BTT];
    int retardado[BTT];
    
    create_pirolito(pirolito);
    create_retardado(retardado);
    compare_lists(pirolito, retardado);
    prints_both(pirolito, retardado);
    
    return 0;
}

问题分析与修复

  1. 核心赋值错误:compare_lists函数中,list1[i]==(int)(x);使用了比较运算符==,而非赋值运算符=,导致数组元素根本没有被修改。应改为list1[i] = (int)x;。
  2. 多余空白输出:compare_lists里的printf("\n");循环执行10次,产生大量空行,直接删除即可。
  3. 打印格式错误:原代码用%2d打印替换后的元素,会输出'X'的ASCII码88,而非字符'X'。需要修改prints_both函数,判断元素是否等于'X'的ASCII值,分别打印字符或数字。
  4. 随机数未初始化:main函数中未调用srand(time(NULL)),每次运行的随机数序列固定,不利于测试,需添加该初始化语句。
  5. 冗余循环优化:当找到匹配元素后,可直接跳出内层循环,避免重复检查。

修复后的代码

// Igualdade entre listas --> Teste 1 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define BTT 10 


void create_pirolito(int list[BTT]);
void create_retardado(int list[BTT]);
void compare_lists(int list1[BTT], int list2[BTT]);
void prints_both(int list1[BTT], int list2[BTT]);



void create_pirolito(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
        list[i]=rand()%10;
    }
}



void create_retardado(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
         list[i]=rand()%20;
    }
}



void prints_both(int list1[BTT], int list2[BTT])
{
    for(int z=0; z<BTT; z++)
    {
        // 判断是否为替换后的'X',分别打印字符或数字
        if(list1[z] == (int)'X')
        {
            printf("(%2c  %2d)\n", 'X', list2[z]);
        }
        else
        {
            printf("(%2d  %2d)\n", list1[z], list2[z]);
        }
    }
}



void compare_lists(int list1[BTT], int list2[BTT])
{
    char x='X';
    for(int i=0; i<BTT; i++)
    {
        for(int j=0; j<BTT; j++)
        {
            if(list1[i]==list2[j])
            {
                list1[i] = (int)x; // 改为赋值运算符
                break; // 找到匹配后跳出内层循环,避免重复操作
            }
        }
    }
}



int main()
{
    // 初始化随机数种子
    srand(time(NULL));
    
    int pirolito[BTT];
    int retardado[BTT];
    
    create_pirolito(pirolito);
    create_retardado(retardado);
    compare_lists(pirolito, retardado);
    prints_both(pirolito, retardado);
    
    return 0;
}

内容的提问来源于stack exchange,提问作者David feoerwg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:30:47