在C中使用ADT创建数组的问题

tf7tbtn2  于 2023-11-16  发布在  其他
关注(0)|答案(1)|浏览(88)

我试图在C中使用抽象数据类型(ADT)创建一个数组,但我似乎遇到了一个逻辑错误。虽然没有编译问题,但输出并不符合预期。我在下面提供了我的代码:

#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));*/

    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 - \n",i);
    scanf("%d",&n);
    n = a->ptr[i];
    }
}

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

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

字符串
我目前得到的输出是:

we are running setval now
00we are running show now
enter element 0 -


然而,预期产出应该是:

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

We are running show now
1
2


任何帮助在确定逻辑错误将不胜感激。谢谢!

p4rjhz4m

p4rjhz4m1#

OP代码中有一些特殊的问题:

  • setVal()中,n = a->ptr[i];行应该是a->ptr[i] = n;,以便将值写入数组。
  • show()中,调用printf应该添加一个新行:printf("%d\n",(a->ptr[i]));
  • main()中,show(&marks);setVal(&marks);行应该切换(先设置,然后显示)。

通过这些更新,结果正如预期的那样。
在更概念化的层面上,为了创建一个抽象数据类型,myArray的定义不应该在数据类型实现之外可见。参见例如this question/answers,以获得旧的,但彻底的讨论。

相关问题