C语言 抽取幸运观众,要求录入幸运观众的编号,姓名,手机号码保存在file05.txt 中,然后从中抽取3位不重复的观众并显示显示姓名电话号码等,将抽取的3位,将观众保存在另一个文件里,最后要有退出功能基于便利性可读性,功能明确等
时间: 2024-03-17 10:45:37 浏览: 12
好的,这是一个需要使用文件读写、随机数生成和数组操作的问题,下面是一个可能的解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX_RECORDS 100 // 最多记录观众数
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_PHONE_LEN 20 // 手机号最大长度
// 观众信息结构体
struct Audience {
char id[10]; // 编号
char name[MAX_NAME_LEN]; // 姓名
char phone[MAX_PHONE_LEN]; // 手机号码
};
// 从文件中读取观众信息
int readAudiences(struct Audience audiences[]) {
FILE *fp;
int count = 0;
fp = fopen("file05.txt", "r");
if (fp == NULL) {
printf("无法打开文件 file05.txt!\n");
return 0;
}
while (!feof(fp) && count < MAX_RECORDS) {
fscanf(fp, "%s %s %s", audiences[count].id, audiences[count].name, audiences[count].phone);
count++;
}
fclose(fp);
return count;
}
// 将抽奖结果写入文件
void writeResult(struct Audience result[]) {
FILE *fp;
fp = fopen("result.txt", "w");
if (fp == NULL) {
printf("无法创建文件 result.txt!\n");
return;
}
fprintf(fp, "恭喜以下观众获得幸运大奖:\n");
for (int i = 0; i < 3; i++) {
fprintf(fp, "编号:%s,姓名:%s,电话:%s\n", result[i].id, result[i].name, result[i].phone);
}
fclose(fp);
}
int main() {
struct Audience audiences[MAX_RECORDS];
struct Audience result[3];
int count = readAudiences(audiences);
if (count == 0) {
return 0;
}
// 随机选取3个不同的观众
srand(time(NULL));
int selected[3] = {-1, -1, -1};
for (int i = 0; i < 3; i++) {
int idx;
do {
idx = rand() % count;
} while (idx == selected[0] || idx == selected[1]);
selected[i] = idx;
result[i] = audiences[idx];
}
// 显示抽奖结果
printf("恭喜以下观众获得幸运大奖:\n");
for (int i = 0; i < 3; i++) {
printf("编号:%s,姓名:%s,电话:%s\n", result[i].id, result[i].name, result[i].phone);
}
// 将结果写入文件
writeResult(result);
// 退出程序
char choice;
do {
printf("是否退出程序?(Y/N)");
scanf(" %c", &choice);
} while (choice != 'Y' && choice != 'N');
if (choice == 'Y') {
printf("程序已退出。\n");
return 0;
}
else {
main();
}
}
```
这个程序首先读取 `file05.txt` 文件中的观众信息,然后使用 `rand()` 函数随机选取3个不同的观众,将结果输出到屏幕上,并将结果写入 `result.txt` 文件中。程序在最后加入了一个退出功能,让用户可以选择是否退出程序。如果用户选择退出,程序会输出一句话并结束;如果用户选择不退出,程序会重新调用 `main` 函数,回到程序的最开始。请注意,这个程序没有对输入的观众信息进行任何格式或合法性检查,实际应用中可能需要添加这些检查。