C语言文件读写练习
文件读写内容前面已经讲过了,这里有道题,随便贴出来。#includestruct student { long studentNumber; char *firstName; char *lastName; }; /* the function returns the address of an array of student-typed objects */ struct student *readStudentRecordFile(char *fileName, int *numOfStudents) { /* fill in here */ } /* the function writes an array of student-typed objects into a file */ void writeStudentRecordFile(char *fileName, struct student *AllStudents, int *numOfStudents) { /* fill in here */ } /* the function sorts an array of student-typed objects according to studentNumber and returns a sorted array of such objects */ struct student *sortStudents(struct student *AllStudents, int numOfStudents) { /* fill in here */ } /* the function capitaizes the letters in the student namess for an array of student-type objects */ void capitalizeNames(struct student *AllStudents, int numOfStudents) { /* fill in here */ } int main(void) { int nStudents; struct student *readArray; struct student *sortedArray; readArray=readStudentRecordFile("homework8.dat", &nStudents); capitalizeNames(readArray, nStudents); sortedArray=sortStudents(readArray, nStudents); writeStudentRecordFile("homework8_out.dat", sortedArray, &nStudents); return 0; }
不完整的答案吧
#include <stdio.h> #include <stdlib.h> #include <string.h> struct student { long studentNumber; char * firstName; char * lastName; }; /* the function returns the address of an array of student-typed objects */ struct student *readStudentRecordFile(char *fileName, int *numOfStudents) { /* fill in here */ int i=0; struct student *p=(struct student*)malloc(sizeof(struct student)); static struct student AllStudents[10]; char * firstName; char * lastName; long num; FILE *fp; fp=fopen(fileName,"r"); if (fp == NULL) { printf("open file error!\n"); exit(1); } fscanf(fp,"%d\n",numOfStudents); //read total num; loss a & // printf("%d\n",numOfStudents); // for(i=0;i<10;i++){ // fscanf(fp,"%s\t%s\t%l\n",&AllStudents[i].firstName,&AllStudents[i].lastName,&AllStudents[i].studentNumber); // } for ( p= AllStudents;p<AllStudents+10;p++) { firstName = (char *)(malloc(10)); lastName = (char *)(malloc(10)); fscanf(fp,"%s\t%s\t%ld\n",firstName,lastName,&num); p->firstName = (char *)(malloc(10)); strcpy(p->firstName,firstName); p->lastName = (char *)(malloc(10)); p->lastName = lastName; p->studentNumber = num; //printf("%s %s %ld\n",firstName,lastName,num); //printf("%s %s %ld\n",p->firstName,p->lastName,p->studentNumber); } // for(p=AllStudents;p<AllStudents+10;p++){ // printf("%s %s %ld\n",p->firstName,p->lastName,p->studentNumber); // } fclose(fp); p=AllStudents; return p; } /* the function writes an array of student-typed objects into a file */ void writeStudentRecordFile(char *fileName, struct student *AllStudents, int *numOfStudents) { /* fill in here */ int i; FILE *fp; fp=fopen(fileName,"w"); fprintf(fp,"%d\n",*numOfStudents); for(i=0;i<10;i++){ fprintf(fp,"%s\t%s\t%ld\n",((AllStudents+i)->firstName),((AllStudents+i)->lastName),((AllStudents+i)->studentNumber)); } fclose(fp); } /* the function sorts an array of student-typed objects according to studentNumber and returns a sorted array of such objects */ struct student *sortStudents(struct student *AllStudents, int numOfStudents) { /* fill in here */ struct student tmp; int i; int j; // int n; for (i=0;i<10;i++) { //n=0; for(j=0;j<10;j++) { if(AllStudents[i].studentNumber<AllStudents[j].studentNumber){ tmp=AllStudents[j]; AllStudents[j]=AllStudents[i]; AllStudents[i]=tmp; } //n++; } } return AllStudents; } /* the function capitaizes the letters in the student namess for an array of student-type objects */ void capitalizeNames(struct student *AllStudents, int numOfStudents) { /* fill in here */ int i; int j; for(i=0;i<numOfStudents;i++) { j=0; do { AllStudents[i].firstName[j]=toupper(AllStudents[i].firstName[j]); j++; }while(AllStudents[i].firstName[j]!='\0'); //printf("%s\n",AllStudents[i].firstName); j=0; do { AllStudents[i].lastName[j]=toupper(AllStudents[i].lastName[j]); j++; }while(AllStudents[i].lastName[j]!='\0'); //printf("%s\n",AllStudents[i].lastName); } } int main(void) { int nStudents; struct student *readArray; int i; struct student *sortedArray; struct student *tmp; readArray=readStudentRecordFile("homework8.txt", &nStudents); tmp = readArray; printf("%d\n",nStudents); for (i =0;i<10;i++,tmp++) { printf("%s\t%s\t%ld\n",tmp->firstName,tmp->lastName,tmp->studentNumber); } printf("\n\n"); capitalizeNames(readArray, nStudents); tmp = readArray; for (i =0;i<10;i++,tmp++) { printf("%s\t%s\t%ld\n",tmp->firstName,tmp->lastName,tmp->studentNumber); } printf("\n\n"); sortedArray=sortStudents(readArray, nStudents); tmp = sortedArray; for (i =0;i<10;i++,tmp++) { printf("%s\t%s\t%ld\n",tmp->firstName,tmp->lastName,tmp->studentNumber); } writeStudentRecordFile("homework8_out.txt", sortedArray, &nStudents); return 0; }
源代码Extra.rar
0 评论 :
发表评论