我試圖編譯我的程序在C,而這些是我得到的錯誤:(請注意,我在這個語言初學者) 參數未聲明用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;
}
對於將來的問題:請將您的代碼降低到最小,但仍會產生相同的錯誤。在你的問題中不應該有不活動的代碼或不相關的代碼。你也應該突出顯示錯誤發生的路線。 – stefan