c-使用阵列的分段故障11



我是一个编码初学者,我的代码需要编译,但当我输入整数时,我会出现分段错误。请帮忙。

问题是:我需要首先得到有多少学生,然后下一个输入将是这些学生的分数。因此,如果输入3分,接下来的输入应该是3名学生的3分。那么输入应该是g(女孩(或b(男孩(。从那里,如果男孩,我需要总结所有的奇数分数。

这是我的代码:

#include<stdio.h>
#include<stdlib.h>
int marks_summation(int* marks, int number_of_students, char gender){
int i=0, sum=0;
int marksforGirls=0, marksforBoys=0;
char g;
for(marks = 0; *marks <= number_of_students; marks++){
if(gender == g){
do{
if(marks[i]%2 == 0){
marksforGirls = marks[i];
i++;
sum += marksforGirls;
}
} while(*marks<=number_of_students);
}
else{
do{
if(marks[i]%2 != 0){
marksforBoys = marks[i];
i++;
sum += marksforBoys;
}
} while (*marks<=number_of_students);
}
}
return 0;
}

int main(){
int i=0, number_of_students=0;
int *marks=0;
int sum=0;
char gender;
scanf("%d",&number_of_students);
marks = (int*)malloc(number_of_students * sizeof(int));
for(i=0; i<number_of_students; i++){
scanf(" %d", &marks[i]);//for every marks put in, it will go into marks
}
scanf("%c",&gender);
marks_summation(marks, number_of_students, gender);
printf("%d", sum);
free(marks);
return 0;
}

下面的行没有做你可能认为它会做的事情:

for(marks = 0; *marks <= number_of_students; marks++)

我相信您应该使用索引来访问每个marks元素。

正如其他人所指出的,问题出在for循环中。除了指针是错误的,循环条件也是错误的。此外,您的函数不会返回任何内容。另外,do-while循环都是无限循环。

试试这个:

int mark_sum(int *marks, int number_of_students, char gender){
int sum = 0;
for(int i = 0; i < number_of_students; ++i){
if(gender = 'g'){
if(marks[i] % 2 == 0)
sum += marks[i];
} else {
if(marks[i] % 2 != 0)
sum += marks[i];
}
}
return sum;
}

此外,在主要情况下,您需要实际存储函数返回的值:

int sum = mark_sum(marks, number_of_students, gender);

最新更新