Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结构和在C中输入的值_C_Output - Fatal编程技术网

结构和在C中输入的值

结构和在C中输入的值,c,output,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 * si

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

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

}
struct标记{
int x;
};
int main(){
int n;
printf(“输入学生人数:”);
scanf(“%d”和“&n”);
结构标记*marks=malloc(n*sizeof(结构标记));
对于(int i=0;i
更改:

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


在这段代码中的
main

 for (int i = 0; i < n; i++ ){
        printf("Enter mark: ");
        scanf("%d",&(*marks).x);
    }
for (i = 0; i < n; i++ ){
        sum= sum+(*marks).x;
    }
您不是在marks数组上迭代,而是始终读取第一个数组值

    scanf("%d",&(*marks).x);
表示您正在读取
标记
中的第一个
标记

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

sum= sum+(*marks).x;

这也相当于

sum = sum+(*marks+i).x;
对我来说也是如此

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

scanf("%d",&marks[i].x);
再说一遍

标记[i].x
相当于
(*marks+i).x


关键是您希望在for循环的第二次迭代中访问
marks
中的第二个
mark
。此外,不要忘记<代码>()代码>当程序完成时,你的代码>标记< /C>。如果是C(标题中所述,为什么是C++标签?),我尝试把这个锤打成一个形状。使用标记[i]代替(*Mark)。你总是写和读第一个代码>标记< /代码>。请注意,在
的两个
周期中,您没有使用索引
i
。相反,您应该使用索引在
标记
数组中选择正确的
标记
。例如
scanf(“%d”),&marks[i].x)
scanf("%d",&(*marks).x);
scanf("%d",&marks[i].x);