请根据上面的代码给出注释
时间: 2024-02-13 20:06:13 浏览: 145
以下是带注释的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX_LEN 50
// 定义幸运观众结构体
typedef struct {
int id;
char name[MAX_LEN];
char phone[MAX_LEN];
} Viewer;
// 定义文件名
const char FILE_NAME[] = "file05.txt";
// 获取文件中已有的幸运观众数量
int getViewerCount() {
int count = 0;
FILE *fp = fopen(FILE_NAME, "r"); // 以只读方式打开文件
if (fp == NULL) {
return count; // 如果文件不存在,直接返回0
}
while (!feof(fp)) { // 循环读取文件中的每一行,直到文件末尾
Viewer viewer;
fscanf(fp, "%d %s %s\n", &viewer.id, viewer.name, viewer.phone); // 读取观众编号、姓名和手机号码
if (strlen(viewer.name) > 0) { // 如果读取到了有效信息(姓名不为空),则增加计数器
count++;
}
}
fclose(fp); // 关闭文件
return count;
}
// 录入幸运观众信息
void recordViewer() {
FILE *fp = fopen(FILE_NAME, "a"); // 以追加方式打开文件
if (fp == NULL) {
printf("文件打开失败!");
return;
}
Viewer viewer;
printf("请输入观众编号:");
scanf("%d", &viewer.id);
printf("请输入观众姓名:");
scanf("%s", viewer.name);
printf("请输入观众手机号码:");
scanf("%s", viewer.phone);
fprintf(fp, "%d %s %s\n", viewer.id, viewer.name, viewer.phone); // 将观众信息写入文件
fclose(fp); // 关闭文件
printf("幸运观众信息已保存!\n");
}
// 随机选取幸运观众
void selectViewer() {
int count = getViewerCount(); // 获取幸运观众数量
if (count < 3) { // 如果观众数量不足3人,无法抽取幸运观众
printf("观众数量不足,无法抽取幸运观众!\n");
return;
}
srand((unsigned int) time(NULL)); // 初始化随机数种子
int selected[3] = {-1, -1, -1}; // 记录已选中的幸运观众编号
int i, j;
for (i = 0; i < 3; i++) { // 循环3次,每次选取一个幸运观众
int index;
do {
index = rand() % count + 1; // 随机选取一个幸运观众编号
for (j = 0; j < i; j++) { // 判断该幸运观众编号是否已被选中
if (selected[j] == index) { // 如果已选中,则重新选取
index = -1;
break;
}
}
} while (index == -1);
selected[i] = index; // 记录已选中的幸运观众编号
}
FILE *fp = fopen("lucky_viewer.txt", "w"); // 以写入方式打开文件
if (fp == NULL) {
printf("文件打开失败!");
return;
}
for (i = 0; i < 3; i++) { // 循环3次,每次根据选中的幸运观众编号读取文件中的信息
FILE *fp2 = fopen(FILE_NAME, "r");
if (fp2 == NULL) {
continue;
}
int k = 1;
while (!feof(fp2)) { // 循环读取文件中的每一行,直到文件末尾
Viewer viewer;
fscanf(fp2, "%d %s %s\n", &viewer.id, viewer.name, viewer.phone); // 读取观众编号、姓名和手机号码
if (strlen(viewer.name) > 0 && k == selected[i]) { // 如果读取到了有效信息(姓名不为空)并且观众编号等于选中的编号,说明该观众被选中
printf("幸运观众%d:姓名:%s,手机号码:%s\n", i+1, viewer.name, viewer.phone); // 打印幸运观众的姓名和手机号码
fprintf(fp, "%s %s\n", viewer.name, viewer.phone); // 将幸运观众的姓名和手机号码写入文件
break;
}
k++; // 计数器加1
}
fclose(fp2); // 关闭文件
}
fclose(fp); // 关闭文件
}
int main() {
int choice;
do {
printf("1-录入幸运观众信息\n");
printf("2-抽取幸运观众\n");
printf("3-退出系统\n");
printf("请选择要执行的操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
recordViewer(); // 录入幸运观众信息
break;
case 2:
selectViewer(); // 抽取幸运观众
break;
case 3:
printf("谢谢使用!\n");
break;
default:
printf("无效的选择!\n");
}
} while (choice != 3); // 循环执行,直到用户选择退出系统
return 0;
}
```
本代码实现了以下功能:
1. 定义了幸运观众结构体,并定义了文件名常量。
2. 实现了获取文件中已有的幸运观众数量的函数 `getViewerCount()`,并实现了录入幸运观众信息的函数 `recordViewer()`。
3. 实现了随机选取幸运观众的函数 `selectViewer()`,并将选中的幸运观众的信息保存到文件 `lucky_viewer.txt` 中。
4. 提供了菜单选择,用户可以选择录入幸运观众信息、抽取幸运观众、退出系统。用户选择后,会调用相应的函数执行对应的操作。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)