繁体   English   中英

在C中输入的结构和值

[英]struct and values entered in C

我的程序无法正常工作。 例如,问题是:

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

fun()函数中的输出和应返回15。 但是,它返回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).x);

意味着你正在阅读到的第一markmarks

您已经有一个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

问题的关键是,你要访问的第二个markmarks在你的for循环的第二次迭代。 同样,程序完成后,请不要忘记free()您的marks

变化:

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;
    }

您没有遍历标记数组,而是始终读取第一个数组的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM