void duqu_list(lianxiren*head) {FILE *fp; if((fp=fopen("通讯录保存位置.txt","r+"))==NULL) {//dat printf("电话簿为空,请重新创建\n"); exit(0);} lianxiren*p1=head; p1=(lianxiren*)malloc(LEN); while(fscanf(fp,"%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->number,p1->home,p1->email)!=EOF){ printf("%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->number,p1->home,p1->email);} return; fclose(fp); }
时间: 2023-10-30 16:08:10 浏览: 71
这段代码是用来读取一个通讯录文件并将内容输出到控制台的函数。代码中打开了一个名为“通讯录保存位置.txt”的文件,并从文件中读取每行的内容,然后将每行的内容按照一定的格式输出到控制台。该函数接受一个指向链表头结点的指针作为参数,但代码中并没有对链表进行修改或操作,只是将文件中的内容输出到控制台上。最后,该函数通过调用fclose()函数来关闭文件。
相关问题
解释代码lianxiren*load_list(lianxiren*head) {FILE *fp; if((fp=fopen("通讯录保存位置.dat","r+"))==NULL) {//dat printf("电话簿为空,请重新创建\n"); exit(0);} lianxiren*p1,*p2; p1=(lianxiren*)malloc(LEN); if(fread(p1,LEN,1,fp)==0) {printf("电话簿为空,请重新创建\n"); return head; } head=p1; p2=p1; p1=(lianxiren*)malloc(LEN); while(fread(p1,LEN,1,fp)) { p2->next=p1; p2=p1; p1=(lianxiren*)malloc(LEN); } p2->next=NULL; free(p1); return(head); fclose(fp); } //文件读取函数1 void duqu_list(lianxiren*head) {FILE *fp; if((fp=fopen("通讯录保存位置.txt","r+"))==NULL) {//dat printf("电话簿为空,请重新创建\n"); exit(0);} lianxiren*p1=head; p1=(lianxiren*)malloc(LEN); while(fscanf(fp,"%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->number,p1->home,p1->email)!=EOF){ printf("%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->number,p1->home,p1->email);} return; fclose(fp); }
这份代码实现了从文件中读取联系人信息并将其存入链表中的功能。首先通过 fopen() 函数打开一个名为“通讯录保存位置.dat”的文件,如果文件打开失败则输出提示信息并退出。然后通过 fread() 函数逐个读取文件中存储的联系人信息,每读取一个联系人信息就动态分配一个节点来存储,并将其添加到链表中。需要注意的是,这里读取的数据是二进制数据,因此需要指定读取数据的长度。最后在返回链表头节点之前,需要释放最后一个动态分配的节点的内存。
另外,代码中还有一个函数名为 duqu_list(),用于从文本文件中读取联系人信息并输出到控制台。该函数与 load_list() 函数不同之处在于,它使用 fscanf() 函数逐行读取文本文件中的联系人信息,并将其输出到控制台。需要注意的是,这里读取的数据是文本数据,因此可以直接使用 fscanf() 函数进行读取。读取数据的方式是通过指定读取的格式字符串,将每个字段的值读取到对应的变量中。最后在读取完毕后需要关闭文件。
给这段代码添加中文注释:#include<stdio.h> #include<conio.h> #include<windows.h> struct student { char code[10]; float s1,s2,s3; float score; char grade; }temp; void set(int *choice) { printf(" ******* 1、从文件读取数据 *******\n"); printf(" ******* 2、计算并显示成绩 *******\n"); printf(" ******* 3、按等级查询 *******\n"); printf(" ******* 4、按总评成绩排序 *******\n"); printf(" ******* 5、按学号查询 *******\n"); printf(" ******* 6、查询所有等级 *******\n"); printf(" ******* 7、保存到文件 *******\n"); printf(" ******* 0、退出系统 *******\n\n"); printf("请选择您所需要操作的功能:"); *choice=getch(); } void dispinfo() { system("cls"); printf("\n\n"); printf(" *********************** 欢迎成绩核算系统 **********************\n\n"); printf(" *********************** **************** **********************\n\n"); } int duqu(struct student *list) { int n; int i=0; FILE *fp; fp=fopen("C:\Users\dell\Desktop\软件设计-源文件\A3-2","r"); fscanf(fp,"%d",&n); for(i=0;i<n;i++) { fscanf(fp,"%s %f %f %f",list[i].code,&list[i].s1,&list[i].s2,&list[i].s3); } printf("学号 平时成绩 期中成绩 期末成绩 \n"); for(i=0;i<n;i++) printf("\t %s %5.1lf %5.1lf %5.1lf \n",list[i].code,list[i].s1,list[i].s2,list[i].s3); printf("\n\n\n ****** 读取文件成功!摁任意键继续! ****** \n"); getch(); fclose(fp); return n; } void view(struct student *list,int amount) { int i=0; float average=0; printf("\n 学号 总评 等级 \n"); for(i=0;i<amount;i++) { average+=list[i].score; printf("%10s %6.1f %c \n",list[i].code,list[i].score,list[i].grade); } average/=amount; printf(" 本班总人数 %d 本班平均成绩 %.1f\n",amount,average); printf("\n\n\n\n\n ***** 摁任意键继续! ****** \n"); getch(); } void paixu(struct student *list,int amount) { float temp; char temp1; char temp2[10]; int i,j; for(i=0;i<amount;i++) for(j=i+1;j<amount;j++) { if(list[j].score>list[i].score) { temp=list[j].score; list[j].score=list[i].score; list[i].score=temp; strcpy(temp2,list[j].code); strcpy(list[j].code,list[i].code); strcpy(list[i].code,temp2); temp=list[j].s1; list[j].s1=list[i].s1; list[i].s1=temp; temp=list[j].s2; list[j].s2=list[i].s2; list[i].s2=temp; temp=list[j].s3; list[j].s3=list[i].s3; list[i].s3=temp; temp1=list[j].grade; list[j].grade=list[i].grade; list[i].grade=temp1; } } view(list,amount); }
/*
* 该程序实现了一个成绩核算系统
* 包含文件读取、成绩计算、按等级查询、按总评成绩排序、按学号查询、查询所有等级、保存到文件等功能
*/
#include<stdio.h>
#include<conio.h>
#include<windows.h>
// 学生结构体,包含学号、平时成绩、期中成绩、期末成绩、总评成绩、等级
struct student {
char code[10];
float s1, s2, s3;
float score;
char grade;
}temp;
// 显示操作菜单的函数
void set(int *choice) {
printf(" ******* 1、从文件读取数据 *******\n");
printf(" ******* 2、计算并显示成绩 *******\n");
printf(" ******* 3、按等级查询 *******\n");
printf(" ******* 4、按总评成绩排序 *******\n");
printf(" ******* 5、按学号查询 *******\n");
printf(" ******* 6、查询所有等级 *******\n");
printf(" ******* 7、保存到文件 *******\n");
printf(" ******* 0、退出系统 *******\n\n");
printf("请选择您所需要操作的功能:");
*choice = getch();
}
// 显示欢迎信息的函数
void dispinfo() {
system("cls");
printf("\n\n");
printf(" *********************** 欢迎成绩核算系统 **********************\n\n");
printf(" *********************** **************** **********************\n\n");
}
// 从文件读取数据并显示的函数
int duqu(struct student *list) {
int n;
int i = 0;
FILE *fp;
fp = fopen("C:\Users\dell\Desktop\软件设计-源文件\A3-2", "r");
fscanf(fp, "%d", &n);
for(i = 0; i < n; i++) {
fscanf(fp, "%s %f %f %f", list[i].code, &list[i].s1, &list[i].s2, &list[i].s3);
}
printf("学号 平时成绩 期中成绩 期末成绩 \n");
for(i = 0; i < n; i++) {
printf("\t %s %5.1lf %5.1lf %5.1lf \n", list[i].code, list[i].s1, list[i].s2, list[i].s3);
}
printf("\n\n\n ****** 读取文件成功!摁任意键继续! ****** \n");
getch();
fclose(fp);
return n;
}
// 计算并显示成绩的函数
void view(struct student *list, int amount) {
int i = 0;
float average = 0;
printf("\n 学号 总评 等级 \n");
for(i = 0; i < amount; i++) {
// 计算总评成绩
list[i].score = list[i].s1 * 0.3 + list[i].s2 * 0.3 + list[i].s3 * 0.4;
// 根据总评成绩计算成绩等级
if(list[i].score >= 90) {
list[i].grade = 'A';
}
else if(list[i].score >= 80) {
list[i].grade = 'B';
}
else if(list[i].score >= 70) {
list[i].grade = 'C';
}
else if(list[i].score >= 60) {
list[i].grade = 'D';
}
else {
list[i].grade = 'E';
}
average += list[i].score;
printf("%10s %6.1f %c \n", list[i].code, list[i].score, list[i].grade);
}
average /= amount;
printf(" 本班总人数 %d 本班平均成绩 %.1f\n", amount, average);
printf("\n\n\n\n\n ***** 摁任意键继续! ****** \n");
getch();
}
// 按总评成绩排序并显示的函数
void paixu(struct student *list, int amount) {
float temp;
char temp1;
char temp2[10];
int i, j;
for(i = 0; i < amount; i++) {
for(j = i + 1; j < amount; j++) {
if(list[j].score > list[i].score) {
temp = list[j].score;
list[j].score = list[i].score;
list[i].score = temp;
strcpy(temp2, list[j].code);
strcpy(list[j].code, list[i].code);
strcpy(list[i].code, temp2);
temp = list[j].s1;
list[j].s1 = list[i].s1;
list[i].s1 = temp;
temp = list[j].s2;
list[j].s2 = list[i].s2;
list[i].s2 = temp;
temp = list[j].s3;
list[j].s3 = list[i].s3;
list[i].s3 = temp;
temp1 = list[j].grade;
list[j].grade = list[i].grade;
list[i].grade = temp1;
}
}
}
view(list, amount);
}
阅读全文