Closed. This question needs to be more
focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过
editing this post专注于一个问题。
4年前关闭。
这是我遇到的代码。我不断遇到这些错误:
bad.c:在“驱动程序”功能中:
bad.c:41:警告:初始化使指针从整数开始而没有
投
bad.c:49:警告:赋值使指针从整数开始而没有
投
bad.c:60:错误:参数太少,无法使用“ searchStudentID”功能
bad.c:在顶层:
bad.c:89:错误:“ readStudents”的类型冲突
bad.c:41:注意:之前的“ readStudents”隐式声明是
这里
bad.c:在“ readStudents”函数中:
bad.c:95:警告:赋值使指针从整数开始而没有
投
bad.c:103:错误:在“关闭”之前应为“;”
bad.c:在“ printStudents”函数中:
bad.c:116:错误:请求成员“ FName”的方式不是
结构或联合
bad.c:116:错误:请求成员“ LName”的内容不是
结构或联合
bad.c:116:错误:请求成员“ GPA”的方式不是
结构或联合
bad.c:116:错误:请求成员“ ID”的方式不是结构
或工会
bad.c:119:警告:函数返回“带值”返回void
bad.c:在“ searchStudentID”函数中:
bad.c:131:错误:对二进制==无效的操作数(具有“ int”和
'学生')
bad.c:在顶层:
bad.c:160:错误:“ sortStudentsByLastName”的类型冲突
bad.c:49:注意:先前的隐式声明
“ sortStudentsByLastName”在这里
bad.c:在“ sortStudentsByLastName”函数中:
bad.c:176:错误:初始化类型“ int”时类型不兼容
使用“学生”类型
bad.c:178:错误:分配给“学生”类型时类型不兼容
来自“ int”类型
bad.c:在“ sortStudentsByID”函数中:
bad.c:201:错误:初始化类型“ int”时类型不兼容
使用“学生”类型
bad.c:203:错误:分配给“学生”类型时类型不兼容
来自“ 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);
}