1. 设有以下结构体类型: struct STUDENT //学生结构体定义 { char id[11];//学号 char name[21];//姓名 char sex[4];//性别 char className[31];//班级 struct STUDENT *next;//指向下一个学生结构体的指针 }; 利用上述结构体类型创建链表。从文件“students.txt”(请放在源代码同目录下)中读入学生信息(每行一个学生),并保存在链表节点中(一个学生就是一个节点)。最后按照下面的格式把所有学生的信息依次写入一个新文件“output.txt”中 学号 姓名 性别 班级 111 白展堂 男 计应1班 116 张三丰 男 计应2班 118 赵敏 女 软件1班
时间: 2023-12-03 16:47:08 浏览: 177
C++中结构体的类型定义和初始化以及变量引用
以下是创建链表并读取学生信息的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct STUDENT {
char id[11];
char name[21];
char sex[4];
char className[31];
struct STUDENT *next;
};
int main() {
FILE *fp;
char line[100];
struct STUDENT *head = NULL, *tail = NULL, *p;
// 打开文件
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("File open error!\n");
exit(1);
}
// 逐行读取文件并创建链表
while (fgets(line, 100, fp) != NULL) {
p = (struct STUDENT *)malloc(sizeof(struct STUDENT));
sscanf(line, "%s %s %s %s", p->id, p->name, p->sex, p->className);
p->next = NULL;
if (head == NULL) {
head = tail = p;
} else {
tail->next = p;
tail = p;
}
}
// 关闭文件
fclose(fp);
// 输出链表中的学生信息到文件
fp = fopen("output.txt", "w");
if (fp == NULL) {
printf("File open error!\n");
exit(1);
}
fprintf(fp, "学号\t姓名\t性别\t班级\n");
p = head;
while (p != NULL) {
fprintf(fp, "%s\t%s\t%s\t%s\n", p->id, p->name, p->sex, p->className);
p = p->next;
}
fclose(fp);
// 释放链表中的内存
p = head;
while (p != NULL) {
tail = p->next;
free(p);
p = tail;
}
return 0;
}
```
在上述代码中,首先定义了一个学生结构体类型 `STUDENT`,其中包含了学生的学号、姓名、性别、班级和指向下一个学生结构体的指针。然后在 `main()` 函数中,定义了一个文件指针 `fp`,并打开了名为 `students.txt` 的文件。接着使用 `fgets()` 函数逐行读取文件中的学生信息,并使用 `sscanf()` 函数将读取到的字符串转换为学生结构体类型。然后创建一个新的学生结构体,并将读取到的学生信息存储在该结构体中。如果链表为空,则将该结构体作为链表的头结点,否则将该结构体作为链表的尾节点插入。最后输出链表中的所有学生信息到名为 `output.txt` 的文件中,并释放链表中的内存。
运行上述代码后,将会在同目录下生成名为 `output.txt` 的文件,并将学生信息以指定的格式写入该文件中。
阅读全文