发生了很多事情,所以我在 add 函数中放置了一些箭头指向 if 语句,这些语句破坏了代码。当我仅使用 2/3 的 if 语句(需要检查假值)测试代码时,它运行得很好,但如果我添加最后一个 if 语句,则会出现段错误。不知道问题是什么,请帮忙。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
typedef struct{
char name[50];
double havg;
double qavg;
double eavg;
}gradebook_t;
int addStudent(gradebook_t classr[], int currentstudents, int capacity);
int removeStudent(gradebook_t classr[], int currentstudents);
void updateStudent(gradebook_t classr[], int currentstudents, char name[]);
void displayStudents(gradebook_t classr[], int currentstudents);
void missingStudent(gradebook_t classr[], int currentstudents);
int main()
{
gradebook_t classr[5];
int capacity = 5;
int currentstudents = 0;
int selection;
int x = 0;
char nameUpdate[50];
while(x == 0)
{
printf("Choose a selection:\n");
printf("1. Add a student\n");
printf("2. Display students\n");
printf("3. Remove a student\n");
printf("4. Update a student's info\n");
printf("0. Exit\n");
scanf("%d",&selection);
if(selection == 1)
{
currentstudents += addStudent(classr,currentstudents,capacity);
}
else if(selection == 2)
{
displayStudents(classr, currentstudents);
}
else if(selection == 3)
{
currentstudents += removeStudent(classr, currentstudents);
}
else if(selection == 4)
{
printf("What is the name of the student you would like to update?\n");
scanf("%s",nameUpdate);
updateStudent(classr,currentstudents,nameUpdate);
}
else if(selection == 0)
{
x += 1;
}
else
{
printf("Not a selection, try again...\n");
printf("currentstudents = %d",currentstudents);
}
}
return 0;
}
int addStudent(gradebook_t classr[], int currentstudents, int capacity)
{
if(currentstudents != capacity)
{
printf("Enter a student name:");
scanf("%s", classr[currentstudents].name);
printf("Enter a homework average:");
scanf("%lf", &classr[currentstudents].havg);
if(classr[currentstudents].havg < 0 || classr[currentstudents].havg > 100) // <----------
{
classr[currentstudents].havg = 0;
}
printf("Enter a quiz average:");
scanf("%lf", &classr[currentstudents].qavg);
if(classr[currentstudents].qavg < 0 || classr[currentstudents].qavg > 100) // <---------
{
classr[currentstudents].qavg = 0;
}
printf("Enter an exam average:");
scanf("%lf", &classr[currentstudents].eavg);
if(classr[currentstudents].eavg < 0 || classr[currentstudents].eavg > 100) // <-------
{
classr[currentstudents].eavg = 0;
}
}
else
{
printf("The class is full...\n");
}
}
void displayStudents(gradebook_t classr[], int currentstudents)
{
for(int index = 0; index < currentstudents; index++)
{
printf("Student %d Name : %s\n",index+1, classr[index].name);
printf("Student %d HW AVG : %.2lf\n",index+1, classr[index].havg);
printf("Student %d QUIZ AVG : %.2lf\n",index+1, classr[index].qavg);
printf("Student %d EXAM AVG : %.2lf\n\n",index+1, classr[index].eavg);
}
}
int removeStudent(gradebook_t classr[], int currentstudents)
{
char find1[20];
int x = 0;
printf("Enter a student name:");
scanf("%s",find1);
for(int index = 0; index < currentstudents; index++)
{
if(strcmp(find1,classr[index].name) == 0)
{
classr[index] = classr[currentstudents-1];
x = -1;
}
}
return x;
}
void updateStudent(gradebook_t classr[], int currentstudents, char name[])
{
double havg2;
double qavg2;
double eavg2;
for(int index = 0; index < currentstudents; index++)
{
if(strcmp(name,classr[index].name) == 0)
{
printf("Please update the following:\n");
printf("HW AVG:\n");
scanf("%lf",&havg2);
classr[index].havg = havg2;
printf("QUIZ AVG:\n");
scanf("%lf",&qavg2);
classr[index].qavg = qavg2;
printf("EXAM AVG:\n");
scanf("%lf",&eavg2);
classr[index].eavg = eavg2;
}
}
}
void missingStudent(gradebook_t classr[], int currentstudents)
{
int x = 0;
printf("Students with missing info:\n");
for(int index = 0; index < currentstudents; index++)
{
if(classr[index].havg == 0)
{
x += 1;
}
if(classr[index].qavg == 0)
{
x += 1;
}
if(classr[index].eavg == 0)
{
x += 1;
}
if(x>0)
{
printf("%s",classr[index].name);
}
}
}
这甚至不是调试 - 请阅读编译器警告:函数 addStudent() 必须返回一个值,由 currentstudents += addStudent(...) 使用; – 风向标
他的言语真的很美妙,爱你,兄弟。 ^^