当前位置:编程学习 > C/C++ >>

C++程序高手请帮忙分析一下

C程序高手请帮忙分析一下下面的代码,我需要每行有注释,我将给与高分,谢谢

void readData()

{

FILE* fp;//文件指针

struct student *p1, *p2;

fp = fopen(FILE_DATA_PATH, "r");

if (!fp)

{

printf("文件打开错误!");

return;

}

fscanf(fp,"%d\n", &TOTAL_NUM);

head = p1 = p2 = (struct student *)malloc(LEN);

fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",

&p1->num, p1->name, &p1->age, p1->易做图, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);

while(!feof(fp))

{

p1 = (struct student *)malloc(LEN);

fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",

&p1->num, p1->name, &p1->age, p1->易做图, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);

p2->next = p1;

p2 = p1;

}

p2->next = NULL;

fclose(fp);

}

//删除学生信息

void del()

{

struct student *p1, *p2;

long int num;

if(head == NULL)

{

printf("无学生记录!\n");

return;

}

printf("请输入您要删除的学生的学号:");

scanf("%ld", &num);

p1 = head;

while(num != p1->num && p1->next != NULL)

{

p2 = p1;

p1 = p1->next;

}

if(num == p1->num)

{

if(p1 == head)

head = p1->next;

else p2->next = p1->next;

free(p1);

TOTAL_NUM--;

}

else

printf("没有该学生记录,请核对!\n");

}

//修改学生信息

void change()

{

struct student *p1, *p2;

long int num;

if(head == NULL)

{

printf("无学生记录!\n");

return;

}

printf("请输入您要修改的学生的学号:");

scanf("%ld", &num);

p1 = head;

while(num != p1->num && p1->next != NULL)

{

p2 = p1;

p1 = p1->next;

}

if(num == p1->num)

devise(p1);

else

printf("没有该学生记录,请核对!\n");

}

void devise(struct student *p)

{

int choice;

choice = -1;

do

{

printf("请选择您要修改的学生的信息内容:\n");

printf("+----------------------+\n");

printf("| 姓名 请按 1 |\n");

printf("| 年龄 请按 2 |\n");

printf("| 性别 请按 3 |\n");

printf("| 出生年月 请按 4 |\n");

printf("| 地址 请按 5 |\n");

printf("| 电话 请按 6 |\n");

printf("| E-mail 请按 7 |\n");

printf("| 取消 请按 0 |\n");

printf("+----------------------+\n");

printf("请输入您的选择:");

scanf("%d", &choice);

switch(choice)

{

case 0:

return;

case 1:

printf("请输入新姓名:");

scanf("%s", p->name);

break;

case 2:

printf("请输入新年龄:");

scanf("%d", &p->age);

break;

case 3:

printf("请输入新性别:");

scanf("%s", p->易做图);

break;

case 4:

printf("请输入新出生年月:");

scanf("%s", p->birthday);

break;

case 5:

printf("请输入新地址:");

scanf("%s", p->address);

break;

case 6:

printf("请输入新电话:");

scanf("%ld", &p->tele_num);

break;

case 7:

printf("请输入新E-mail:");

scanf("%s", p->E_mail);

break;

default:

printf("\n无效选项!");

break;

}

}while(choice != 0);

}

追问:#define FILE_DATA_PATH "student.txt"和

while(!feof(fp))

{

p1 = (struct student *)malloc(LEN);

fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",

&p1->num, p1->name, &p1->age, p1->易做图, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);

p2->next = p1;

p2 = p1;

}

p2->next = NULL;

fclose(fp);

}

是什么意思啊?

答案:void readData() 

{

FILE* fp;//文件指针

struct student *p1, *p2; //定义指针学生

fp = fopen(FILE_DATA_PATH, "r"); //打开文件

if (!fp) //如果不存在

{

printf("文件打开错误!"); //提示错误

return; //返回

}

fscanf(fp,"%d\n", &TOTAL_NUM); //输入文件(指针)

head = p1 = p2 = (struct student *)malloc(LEN); //给P1,P2赋初始值

fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",

&p1->num, p1->name, &p1->age, p1->易做图, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); //输入学生的所有信息

while(!feof(fp))

{

p1 = (struct student *)malloc(LEN);

fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",

&p1->num, p1->name, &p1->age, p1->易做图, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);

p2->next = p1;

p2 = p1;

}

p2->next = NULL;

fclose(fp);

}

//删除学生信息

void del()

{

struct student *p1, *p2;

long int num;

if(head == NULL) //判断文件头为空

{

printf("无学生记录!\n");

return;

}

printf("请输入您要删除的学生的学号:");

scanf("%ld", &num); //输入学号

p1 = head; //指针移动到文件头

while(num != p1->num && p1->next != NULL) //判断学号

{

p2 = p1;

p1 = p1->next; //指针后移

}

if(num == p1->num) //判断输入的学号和文件里的是否相等

{

if(p1 == head) //判断指针P1位置是否在开头

head = p1->next; //指针后移

else p2->next = p1->next;

free(p1);

TOTAL_NUM--;

}

else

printf("没有该学生记录,请核对!\n");

}

//修改学生信息

void change()

{

struct student *p1, *p2; //定义指针学生

long int num; //定义学号num

if(head == NULL) //判断为空

{

printf("无学生记录!\n"); //输出信息

return;

}

printf("请输入您要修改的学生的学号:");

scanf("%ld", &num);

p1 = head; //定位指针

while(num != p1->num && p1->next != NULL) //判断学号不为空而且P1指针下一位不为空

{

p2 = p1;

p1 = p1->next; //P1后移

}

if(num == p1->num) //如果输入的学号等于P1指针位置的值

devise(p1); //调用下面的函数devise

else

printf("没有该学生记录,请核对!\n");

}

void devise(struct student *p)

{

int choice; //定义选择值

choice = -1; //先赋值空

do

{

printf("请选择您要修改的学生的信息内容:\n"); //原样输出“请选择您要修改的学生的信息内容:”

printf("+----------------------+\n"); //原样输出

printf("| 姓名 请按 1 |\n"); //原样输出

printf("| 年龄 请按 2 |\n"); //原样输出

printf("| 性别 请按 3 |\n"); //原样输出

printf("| 出生年月 请按 4 |\n"); //原样输出

printf("| 地址 请按 5 |\n"); //原样输出

printf("| 电话 请按 6 |\n"); //原样输出

printf("| E-mail 请按 7 |\n"); //原样输出

printf("| 取消 请按 0 |\n"); //原样输出

printf("+----------------------+\n"); //原样输出

printf("请输入您的选择:"); //原样输出

scanf("%d", &choice); //将输入值赋给choice

switch(choice) //判断输入的数字

{

case 0: //是0

return; //返回

case 1: //是1

printf("请输入新姓名:");

scanf("%s", p->name);

break; //退出switch语句

case 2:

printf("请输入新年龄:");

scanf("%d", &p->age);

break; //退出switch语句

case 3:

printf("请输入新性别:");

scanf("%s", p->易做图);

break; //退出switch语句

case 4:

printf("请输入新出生年月:");

scanf("%s", p->birthday);

break; //退出switch语句

case 5:

printf("请输入新地址:");

scanf("%s", p->address);

break; //退出switch语句

case 6:

printf("请输入新电话:");

scanf("%ld", &p->tele_num);

break; //退出switch语句

case 7:

printf("请输入新E-mail:");

scanf("%s", p->E_mail);

break; //退出switch语句

default: //若输入的数字都没有

printf("\n无效选项!"); //提示错误

break; //退出switch语句

}

}while(choice != 0); //判断选择值不为0

}

一些简单的没注释可以吧

#define FILE_DATA_PATH "student.txt" 定义文件宏,就是FILE_DATA_PATH 指向student.txt文件

while(!feof(fp)) //文件没有结束

{

p1 = (struct student *)malloc(LEN); //分配LEN大小的内存空间

fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",

&p1->num, p1->name, &p1->age, p1->易做图, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);

//读入文件中的记录,并将其放到p1所指的内存空间中

p2->next = p1; //将p1作为p2后继,即就是将新的p1排到p2的后面。

p2 = p1; //p2指向刚读入的记录即是p1

}

p2->next = NULL; //链表的结束,没有后继

fclose(fp); //关闭文件

}

明天我帮你注释吧,今天要熄灯了,我睡觉了,加Q 529462570我可以指导你!

上一个:学习c++什么程度才算精通
下一个:谁帮忙写个函数简单C++程序

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,