C语言 抽取幸运观众,要求录入幸运观众的编号,姓名,手机号码保存在file05.txt 中,抽取3位不重复的观众并显示相关信息,将抽取的3位观众保存在另一个文件里
时间: 2024-03-17 21:45:33 浏览: 33
好的,这是一个需要使用文件读写、随机数生成和数组操作的问题,下面是一个可能的解决方案:
```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("Failed to open file 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("Failed to create file result.txt!\n");
return;
}
fprintf(fp, "Congratulations! The lucky audiences are:\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("Congratulations! The lucky audiences are:\n");
for (int i = 0; i < 3; i++) {
printf("%s %s %s\n", result[i].id, result[i].name, result[i].phone);
}
// 将结果写入文件
writeResult(result);
return 0;
}
```
这个程序首先读取 `file05.txt` 文件中的观众信息,然后使用 `rand()` 函数随机选取3个不同的观众,将结果输出到屏幕上,并将结果写入 `result.txt` 文件中。请注意,这个程序没有对输入的观众信息进行任何格式或合法性检查,实际应用中可能需要添加这些检查。