這是我的代碼,我「米有問題,我不斷收到這些錯誤:初學者ç分配
bad.c: In function ‘driver’:
bad.c:41: warning: initialization makes pointer from integer without a cast
bad.c:49: warning: assignment makes pointer from integer without a cast
bad.c:60: error: too few arguments to function ‘searchStudentID’
bad.c: At top level:
bad.c:89: error: conflicting types for ‘readStudents’
bad.c:41: note: previous implicit declaration of ‘readStudents’ was here
bad.c: In function ‘readStudents’:
bad.c:95: warning: assignment makes pointer from integer without a cast
bad.c:103: error: expected ‘;’ before ‘fclose’
bad.c: In function ‘printStudents’:
bad.c:116: error: request for member ‘FName’ in something not a structure or union
bad.c:116: error: request for member ‘LName’ in something not a structure or union
bad.c:116: error: request for member ‘GPA’ in something not a structure or union
bad.c:116: error: request for member ‘ID’ in something not a structure or union
bad.c:119: warning: ‘return’ with a value, in function returning void
bad.c: In function ‘searchStudentID’:
bad.c:131: error: invalid operands to binary == (have ‘int’ and ‘Student’)
bad.c: At top level:
bad.c:160: error: conflicting types for ‘sortStudentsByLastName’
bad.c:49: note: previous implicit declaration of ‘sortStudentsByLastName’ was here
bad.c: In function ‘sortStudentsByLastName’:
bad.c:176: error: incompatible types when initializing type ‘int’ using type ‘Student’
bad.c:178: error: incompatible types when assigning to type ‘Student’ from type ‘int’
bad.c: In function ‘sortStudentsByID’:
bad.c:201: error: incompatible types when initializing type ‘int’ using type ‘Student’
bad.c:203: error: incompatible types when assigning to type ‘Student’ from type ‘int’
typedef struct student
{
char FName[20];
char LName[20];
float GPA;
int ID;
} Student;
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
Student* ReadStudents(char* filename, int* numStudentsRef);
void printStudents(Student* students, int numStudents);
Student* searchStudentID(Student* students, int low, int high, int targetID);
Student* sortStudentsByID(Student* students, int numStudents);
Student* findHighestGPA(Student* students, int numStudents);
void writeToReadableFile(Student* students, int numStudents, char* filename);
void driver(char* filename, char* filename2);
int main(int argc, char** argv) {
driver(argv[0], argv[1]);
return (EXIT_SUCCESS);
}
void driver(char* filename, char* filename2)
{
int numStudents;
Student* students = readStudents(filename, &numStudents);
printf("Sudents: \n");
printStudents(students, numStudents);
printf("The highest GPA is %.2f.\n", findHighestGPA(students, numStudents).GPA);
printf("------------\nStudents sorted by last name:\n");
students=sortStudentsByLastName(students, numStudents);
printStudents(students, numStudents);
students = sortStudentsByID(students, numStudents);
int ID;
int control;
while(1)
{
printf("------------\nGive me a student ID to search for: ");
scanf("%d", ID);
Student* result = searchStudentID(students, numStudents-1, ID);
if(result = NULL)
{
printf("Student not found.\n");
}
else
{
printf("Found student: \n");
printStudents(result, 1);
}
printf("\n\nEnter 0 to quit or 1 to search for another ID: ");
scanf("%d", &control);
while(control != 1 || control != 0)
{
printf("Sorry, I don't understand that command. Try again.\n");
printf("\n\nEnter 0 to quit or 1 to search for another ID: ");
scanf("%d", &control);
}
if(control == 0)
{
break;
}
}
writeToReadableFile(students, numStudents, filename2);
}
Student* readStudents(char* filename, int* numStudentsRef)
{
FILE* fp = fopen(filename, "r");
fseek(fp, 0, SEEK_END);
numStudentsRef = (int)ftell(fp)/sizeof(Student);
rewind(fp);
Student* students;
fread(&students, sizeof(Student), *numStudentsRef, fp);
free(students)
fclose(fp);
return students;
}
void printStudents(Student* students, int numStudents)
{
int i = 0;
for(; i < numStudents; i++)
{
printf("-----%s %s\n\tGPA: %f\n\tStudent ID: %d\n------\n",
students.FName, students.LName, students.GPA, students.ID);
}
return 0;
}
Student* searchStudentID(Student* students, int low, int high, int targetID)
{
if(low<=high)
{
return NULL;
}
int mid = (low+high)/2;
if(targetID == students[mid])
{
return &students[mid];
}
else if(targetID > students[mid].ID)
{
return searchStudentID(students, low, mid, targetID);
}
else
{
return searchStudentID(students, mid+1, high, targetID);
}
}
Student* findHighestGPA(Student* students, int numStudents)
{
Student* max = &students[0];
int i = 1;
for(i; i < numStudents; i++)
{
if(students[i].GPA > max->GPA)
{
max = &students[i];
}
}
return max;
}
Student* sortStudentsByLastName(Student* students, int numStudents)
{
int i, j, min;
for(j = 0; j < numStudents-1; j++)
{
for(i = j+1; i < numStudents; i++)
{
if(strcmp(students[i].LName, students[min].LName) > 0)
{
min = i;
}
}
if(min != j)
{
int tmp = students[j];
students[j] = students[min];
students[min] = tmp;
}
}
return students;
}
Student* sortStudentsByID(Student* students, int numStudents)
{
int i, j, min;
for(j = 0; j < numStudents-1; j++)
{
min = j;
for(i = j+1; i < numStudents; i++)
{
if(students[i].ID < students[min].ID)
{
min = i;
}
}
if(min != j)
{
int tmp = students[j];
students[j] = students[min];
students[min] = tmp;
}
}
return students;
}
void writeToReadableFile(Student* students, int numStudents, char* filename)
{
FILE* fp = fopen(filename, "w");
int i = 0;
for(;i < numStudents; i++)
{
fprintf(fp, "%s %s\n", students[i].FName, students[i].LName);
fprintf(fp, "%d %d\n", &students[i].GPA, &students[i].ID);
}
fclose(fp);
free(students);
}
我在問有沒有人能幫助我理解我的錯誤,因爲我無法弄清楚。 – ARG
有一個失蹤的「;」免費(學生) –
發佈代碼時,通常應該標記語言(影響語法着色和找到問題的能力!)。同時檢查並確保你的意圖是一致的,並有助於使你的代碼*可讀*。 – crashmstr