写一个歌唱比赛系统,要求用链表和文件读写
时间: 2024-05-10 20:15:57 浏览: 112
好的,我可以给你一个简单的歌唱比赛系统的实现,使用链表和文件读写来存储参赛者信息和比赛结果。
首先,我们需要定义一个参赛者的结构体,包括姓名、年龄、性别和得分等信息。
```c
typedef struct contestant {
char name[50];
int age;
char gender;
float score;
struct contestant* next;
} Contestant;
```
然后,我们需要实现一个函数来从文件中读取参赛者信息并创建一个链表。我们可以将每个参赛者存储为一个结构体,并将它们连接成一个链表。
```c
Contestant* read_contestants(char* filename) {
FILE* fp = fopen(filename, "r");
Contestant* head = NULL;
Contestant* tail = NULL;
char line[100];
while (fgets(line, 100, fp) != NULL) {
Contestant* c = (Contestant*)malloc(sizeof(Contestant));
sscanf(line, "%s %d %c", c->name, &c->age, &c->gender);
c->score = 0.0;
c->next = NULL;
if (head == NULL) {
head = c;
} else {
tail->next = c;
}
tail = c;
}
fclose(fp);
return head;
}
```
接下来,我们可以实现一个函数来让评委们给每个参赛者打分。
```c
void rate_contestants(Contestant* head) {
Contestant* current = head;
while (current != NULL) {
printf("Please rate %s's performance (0-10): ", current->name);
float score;
scanf("%f", &score);
current->score += score;
current = current->next;
}
}
```
最后,我们可以实现一个函数来将比赛结果写入文件中。
```c
void write_results(Contestant* head, char* filename) {
FILE* fp = fopen(filename, "w");
Contestant* current = head;
while (current != NULL) {
fprintf(fp, "%s %d %c %.2f\n", current->name, current->age, current->gender, current->score);
current = current->next;
}
fclose(fp);
}
```
这些函数可以组合在一起,形成一个完整的歌唱比赛系统。例如:
```c
int main() {
Contestant* contestants = read_contestants("contestants.txt");
rate_contestants(contestants);
write_results(contestants, "results.txt");
return 0;
}
```
在这个示例中,我们从名为“contestants.txt”的文件中读取参赛者信息,然后让评委们给每个参赛者打分,最后将比赛结果写入名为“results.txt”的文件中。
阅读全文