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

使用C语言ADT创建数组遇逻辑错误,请求排查

C语言ADT数组逻辑错误修正

你的代码存在三个核心逻辑/顺序错误,以下是具体问题和修正方案:

1. 函数调用顺序完全颠倒

在main函数中,你先调用了show(输出数组),再调用setVal(输入数据)。此时数组刚完成内存分配,元素值是malloc返回的未初始化内存(通常为0),所以先输出了两个0,之后才进入输入流程。

修正后的main函数片段:

int main(){
    struct myArray marks;
    createArray(&marks, 10, 2);
    printf("We are running setVal now\n");
    setVal(&marks);  // 先输入数据
    
    printf("\nWe are running show now\n");
    show(&marks);    // 再输出数据
    
    return 0;
}

2. setVal函数赋值方向错误

输入数据后,你写了n = a->ptr[i];,这是把数组的当前元素值赋给变量n,完全搞反了赋值逻辑——应该把用户输入的n存储到数组对应的位置。

修正后的setVal函数:

void setVal(struct myArray*a){
    int n;
    int i;
    for(i=0; i<a->used_size; i++){
        printf("Enter element %d - ", i);  // 调整提示格式,避免多余换行
        scanf("%d",&n);
        a->ptr[i] = n;  // 将输入值存入数组
    }
}

3. show函数输出格式不符合预期

原show函数将所有元素连续输出,没有换行,导致结果挤在一起。需要在每个元素后添加换行符,匹配预期输出的格式。

修正后的show函数:

void show(struct myArray*a){
    int i;
    for(i=0; i<a->used_size; i++){
        printf("%d\n", a->ptr[i]);  // 每个元素单独一行输出
    }
}

完整修正代码

#include<stdio.h>
#include<stdlib.h>

struct myArray{
    int total_size;
    int used_size;
    int *ptr;
};

void createArray(struct myArray*a, int tsize, int usize){
    a->total_size = tsize;
    a->used_size = usize;
    a->ptr = (int*)malloc(tsize*sizeof(int));
}

void setVal(struct myArray*a){
    int n;
    int i;
    for(i=0; i<a->used_size; i++){
        printf("Enter element %d - ",i);
        scanf("%d",&n);
        a->ptr[i] = n;
    }
}

void show(struct myArray*a){
    int i;
    for(i=0; i<a->used_size; i++){
        printf("%d\n", a->ptr[i]);
    }
}

int main(){
    struct myArray marks;
    createArray(&marks, 10, 2);
    printf("We are running setVal now\n");
    setVal(&marks);
    
    printf("\nWe are running show now\n");
    show(&marks);
    
    return 0;
}

验证输出(输入1和2时)

We are running setVal now
Enter element 0 - 1
Enter element 1 - 2

We are running show now
1
2

内容的提问来源于stack exchange,提问作者a potato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:16:25