在C中输入的结构和值

时间:2016-02-03 08:06:25

标签: c output

我有一个不起作用的程序。例如,问题是:

您为学生输入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);

}

3 个答案:

答案 0 :(得分:2)

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

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

你已经有一个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循环的第二次迭代中访问mark中的第二个marks。此外,当您的计划完成时,请不要忘记free() marks

答案 1 :(得分:0)

改变:

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

sum= sum+marks[i].x;

答案 2 :(得分:0)

在这段代码中的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;
    }

你没有遍历标记数组,而是总是读取第一个数组值。