用c语言编写随机点名的程序,要求如下: (1) 事先编辑好一个存放所有学生姓名的文本文件,每个学生的姓名占一行; (2) 产生一个随机数n,据此读取文本文件中的第n行的学生姓名并输出; (3) 将刚才读取的第n行从文本文件中删除(后续学生的姓名依次往前移)
时间: 2024-04-10 09:28:23 浏览: 148
下面是一个用C语言编写的随机点名程序,满足你的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 100
void deleteLineFromFile(const char *filename, int lineNum) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件: %s\n", filename);
return;
}
// 创建一个临时文件用于保存删除行后的内容
FILE *tempFile = fopen("temp.txt", "w");
if (tempFile == NULL) {
printf("无法创建临时文件\n");
fclose(fp);
return;
}
char buffer[MAX_NAME_LENGTH];
int currentLine = 1;
// 逐行读取文件内容,将第n行之前的内容写入临时文件
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
if (currentLine != lineNum) {
fputs(buffer, tempFile);
}
currentLine++;
}
fclose(fp);
fclose(tempFile);
// 删除原文件并重命名临时文件为原文件名
remove(filename);
rename("temp.txt", filename);
}
int main() {
const char *filename = "students.txt";
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件: %s\n", filename);
return 1;
}
// 统计学生人数
int numStudents = 0;
char buffer[MAX_NAME_LENGTH];
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
numStudents++;
}
fclose(fp);
// 生成一个随机数n
srand(time(NULL));
int n = rand() % numStudents + 1;
// 读取第n行的学生姓名并输出
fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件: %s\n", filename);
return 1;
}
int currentLine = 1;
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
if (currentLine == n) {
printf("随机点名结果: %s", buffer);
// 删除第n行的内容
deleteLineFromFile(filename, currentLine);
break;
}
currentLine++;
}
fclose(fp);
return 0;
}
```
请将上述代码保存为一个名为 `random_name.c` 的文件,并创建一个名为 `students.txt` 的文本文件,按照要求在每行中输入学生姓名。然后使用C编译器编译运行该程序,即可实现随机点名并删除已点过的学生。
阅读全文