我是一名编码初学者,可以编译我的代码,但是当我输入整数时,会遇到分段错误。请帮忙。
问题是:我需要首先获得多少学生,然后下一个输入将是这些学生的分数。因此,如果输入3,则下一个输入应该是3个学生中的3个分数。然后输入应该是g(girl)或b(boy)。从那里,如果是男孩,我需要总结所有的奇数。
这是我的代码:
#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;
}
答案 0 :(得分:0)
以下行没有做您可能认为的事情:
for(marks = 0; *marks <= number_of_students; marks++)
我相信您希望使用索引来访问每个mark元素。
答案 1 :(得分:0)
正如其他人指出的那样,问题出在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);