在 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
。
我有一个无法运行的程序。例如问题是:
您为学生输入 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
。