我正在尝试用 C 编译我的程序,这些是我得到的错误:(请注意,我是这种语言的初学者。)
Excer3.c:在函数“addstudent”中:
Excer3.c:50: error: `student' undeclared (first use in this function)
Excer3.c:50: error: (Each undeclared identifier is reported only once
Excer3.c:50: error: for each function it appears in.)
Excer3.c:50: error: parse error before "newS"
Excer3.c:50: error: `newS' undeclared (first use in this function)
Excer3.c:50: error: parse error before ')' token
Excer3.c:52: error: `studentName' undeclared (first use in this function)
Excer3.c: At top level:
Excer3.c:59: error: parse error before '*' token
Excer3.c: In function `readdb':
Excer3.c:70: error: `students' undeclared (first use in this function)
Excer3.c:70: warning: passing arg 2 of `addstudent' makes integer from pointer without a cast
我的代码看起来像这样。该函数无法识别它给出的参数。:
#include <stdio.h>
struct student {
int studentnumber;
char* Name;
struct student* next;
};
struct teacher {
int teachernumber;
char* Name;
struct teacher* next;
};
struct course {
struct teacher teachers[5];
struct student students[50];
int semesternumber;
struct course* next;
};
int readline(char s[],int lim)
{
int c, i;
for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
int addstudent (struct student* prev, int studentnumber, char* studentname)
{
if (!(prev==NULL))
student newS = (student*)malloc(sizeof(student));
newS->studentnumber = studentnumber;
newS->firstname = strdup(studentName);
newS->next = NULL;
prev->next=newS;
return 1;
}
int readdb(student* students)
{
char line[200];
int* studentnumber,coursenumber,teachernumber,semesternumber;
char studentname[100],teachername[100],coursename[100];
while(readline(line,200) > 0)
{
if(sscanf(line, "S %d %s", &studentnumber, studentname)==2)
{
printf("Student. \n\tStudent number: %d, \n\tFirst name: %s\n", studentnumber,
studentname);
addstudent(students,&studentnumber,studentname);
}
else if(sscanf(line, "C %d %s %d", &coursenumber, coursename , &semesternumber)==3)
printf("Course. \n\tCourse number: %d \n\tCourse name: %s \n\tSemester: %d\n",
coursenumber, coursename, semesternumber);
else if(sscanf(line, "E %d %d", &studentnumber, &coursenumber)==2)
printf("Enrolment. \n\tStudent number: %d, \n\tCourse number: %d\n", studentnumber,
coursenumber);
else if(sscanf(line, "T %d %s", &teachernumber, teachername)==2)
printf("Teacher. \n\tTeacher number: %d, \n\tFirst name: %s\n", teachernumber,
teachername);
else if(sscanf(line, "A %d %s", &teachernumber, &coursenumber)==2)
printf("Assignment. \n\tTeacher number: %d, \n\tCourse number: %d\n", teachernumber,
coursenumber);
}
}
int main ()
{
struct student* students = NULL;
readdb(&students);
return 0;
}