2015-09-28 79 views
-2

这是我的代码,我“米有问题,我不断收到这些错误:初学者ç分配

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); 
} 
+0

我在问有没有人能帮助我理解我的错误,因为我无法弄清楚。 – ARG

+0

有一个失踪的“;”免费(学生) –

+0

发布代码时,通常应该标记语言(影响语法着色和找到问题的能力!)。同时检查并确保你的意图是一致的,并有助于使你的代码*可读*。 – crashmstr

回答

1

哦,我的上帝,我不知道我为什么要回答这个问题但是...

无论如何,这里是一些需要解决什么:

l38 )->GPA // You need -> for struct pointer, not a dot. 
l52 (students, 0, numStudents-1, ID); // You are missing a parameter. 
l15 readStudents // lower case for the first letter. 
l122 if(targetID == students[mid]->ID) // You are comparing student to a number, I guess you want to compare the ID, right? 

和很多人一样...

我真的不知道你是怎么想出这些代码的。你在一些地方犯了错误,但在其他地方犯了错误。你知道我的意思?

反正,要注意类型。学生[中]给你一个学生,从中你可以得到你想要的属性,如ID。不要混淆。而一个指向学生的指针与参考不同。

Student s; 
Student *ps; 

它们是不同的。你必须以不同的方式使用它们。

如果您还没有这样做,您需要仔细检查您的代码。

但我怀疑这对别人有帮助,真的。