我有一个不起作用的程序。例如,问题是:
您为学生输入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);
}
答案 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;
}
你没有遍历标记数组,而是总是读取第一个数组值。