在 C 中输入的结构和值

struct and values entered in C

我有一个无法运行的程序。例如问题是:

您为学生输入 2,然后为第一个学生输入 5,然后为第二个学生输入 10。

fun() 函数中的输出总和应该 return 15 。但是,它 returns 20。

到目前为止,这是我的代码:

struct mark{
   int x;   
};

int main(){
    int n;
    printf("Enter the number of student: ");
    scanf("%d",&n);

    struct mark *marks= malloc(n * sizeof(struct mark)); ;

    for (int i = 0; i < n; i++ ){
        printf("Enter mark: ");
        scanf("%d",&(*marks).x);
    }

   fun(marks,n);

    free(marks);
    return 0;
}

void fun(struct mark *marks, int n){
    int sum =0,i;
    for (i = 0; i < n; i++ ){
        sum= sum+(*marks).x;

    }
    printf("Sum: %d \n",sum);

}

更改:

scanf("%d",&marks[i].x);

和:

sum= sum+marks[i].x;

main这段代码里面:

 for (int i = 0; i < n; i++ ){
        printf("Enter mark: ");
        scanf("%d",&(*marks).x);
    }

您总是将标记分配给第一个数组元素。

fun这段代码里面:

for (i = 0; i < n; i++ ){
        sum= sum+(*marks).x;
    }

您不是在遍历标记数组,而是始终读取第一个数组值。

    scanf("%d",&(*marks).x);

表示您正在阅读 marks 中的第一个 mark

您已经有一个 for 循环和一个用于读入它的计数器变量,所以请使用它。改变

sum= sum+(*marks).x;

sum= sum+marks[i].x;

也等同于

sum = sum+(*marks+i).x;

做同样的事情
scanf("%d",&(*marks).x);

改为

scanf("%d",&marks[i].x);

再次,

marks[i].x 等同于 (*marks+i).x

重点是您要在 for 循环的第二次迭代中访问 marks 中的第二个 mark。另外,当你的程序完成时,不要忘记 free() 你的 marks