|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 六翻了 于 2023-11-12 16:11 编辑
这个代码中
如果放在begin函数中,在不改变main函数的情况下,realease该怎么引用head
- // 1.输入学生姓名,学号,成绩
- // 2.将数据写入 txt 文本文档
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 10 // 链表最大长度
- struct Student
- {
- char name[40];
- int num;
- int score;
- struct Student *next;
- };
- typedef struct Student date;
- date *head = NULL;
- int count; // 计数器,链表长度
- date Input(date *p1);
- date add(date **head);
- void realease(date *head);
- void print(date *head);
- void begin();
- void write();
- date Input(date *p1)
- {
- printf("输入姓名:");
- scanf("%s", &p1->name);
- printf("输入学号:");
- scanf("%d", &p1->num);
- printf("输入成绩:");
- scanf("%d", &p1->score);
- putchar('\n');
- count++;
- }
- date add(date **head) //申请内存空间
- {
- date *p1, *temp;
- p1 = (date *)malloc(sizeof(date));
- if (p1 == NULL)
- {
- printf("内存分配失败!");
- exit(1);
- }
- Input(p1);
- // 头插法
- /* if (*head != NULL)
- {
- temp = *head;
- *head = p1;
- p1->next = temp;
- }
- else
- {
- *head = p1;
- p1->next = NULL;
- } */
- // 尾插法
- static date *tail; // 记录尾部位置
- if (*head != NULL)
- {
- tail->next = p1;
- p1->next = NULL;
- }
- else
- {
- *head = p1;
- p1->next = NULL;
- }
- tail = p1; // 每次p1都是最后的链表
- }
- void realease(date *head) //清除malloc
- {
- date *temp;
- while (head != NULL)
- {
- temp = head;
- head = head->next;
- free(temp);
- }
- }
- void begin()
- {
- char ch;
- printf("开始录入\n");
- while (1)
- {
- add(&head);
- printf("是否继续输入?(Y/N) ->> ");
- do
- {
- ch = getchar();
- } while (ch != 'N' && ch != 'Y');
- if (ch == 'N')
- break;
- if (count >= MAX)
- {
- printf("已达到最大空间,无法录入!!\n");
- break;
- }
- }
- }
- void print(date *head) //测试用,显示到屏幕
- {
- date *p1;
- p1 = head;
- while (p1 != NULL)
- {
- printf("%s ->> %d ->> %d\n", p1->name, p1->num, p1->score);
- p1 = p1->next;
- }
- }
- void write() //写入文件
- {
- FILE *fp;
- if ((fp = fopen("wan.txt", "w")) == NULL)
- {
- printf("打开文件失败!\n");
- exit(EXIT_FAILURE);
- }
- date *p1 = head;
- for (int i = 0; i < count; i++) // 写入txt文件
- {
- if (p1 == NULL)
- {
- break;
- }
- fprintf(fp, "%s\t", p1->name);
- fprintf(fp, "%d\t", p1->num);
- fprintf(fp, "%d\n", p1->score);
- p1 = p1->next;
- }
- printf("\n文本写入完成!\n\n");
- }
- int main(void)
- {
- begin();
- // print(head);//将输入内容显示到屏幕,测试用
- write(); // 写入文本
- realease(head); // 释放临时内存空间
- return 0;
- }
复制代码
拒绝脚本自动回复 |
|