int = sizeof(stu_name) / sizeof(stu_name[0]); printf("请输入要抽取学生的个数\n"); int k; scanf("%d",&k); int n=0; for (int i = 0; n = k; i++) { srand(time(NULL)); // 设置随机种子 int name = rand() % num_name; // 随机生成一个索引 if (stu_name[name] =NULL) { continue; } printf("今天被点到名的同学是:%s\n", stu_name[name]); n++; stu_name[name]=NULL; }
时间: 2024-04-16 21:23:45 浏览: 84
24_sizeof与strlen的区别1
这段代码中存在一些错误,我将对其进行修正:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char *stu_name[] = {"Alice", "Bob", "Charlie", "David", "Eve"}; // 假设有5个学生姓名
int num_name = sizeof(stu_name) / sizeof(stu_name[0]);
printf("请输入要抽取学生的个数:\n");
int k;
scanf("%d", &k);
if (k > num_name) {
printf("输入的抽取个数大于学生总数!\n");
return 0;
}
srand(time(NULL)); // 设置随机种子
printf("今天被点到名的同学是:");
for (int i = 0; i < k; i++) {
int name_index;
do {
name_index = rand() % num_name; // 随机生成一个索引
} while (stu_name[name_index] == NULL);
printf("%s ", stu_name[name_index]);
stu_name[name_index] = NULL; // 将已抽取的学生姓名置为空
}
printf("\n");
return 0;
}
```
修正后的代码中,我们首先定义了一个存储学生姓名的字符串指针数组`stu_name`,然后计算了学生总数`num_name`。接着通过用户输入获取要抽取的学生个数`k`,并进行判断是否超过了学生总数。然后使用`srand`函数设置随机种子。在循环中,我们使用`do-while`循环来随机生成一个学生姓名的索引,直到找到一个非空姓名为止。然后输出被点到名的学生姓名,并将其置为空。最后输出结果。
注意,代码中对于姓名的空值判断使用的是`NULL`,而不是`NULL`,另外,需要包含头文件`<stdlib.h>`和`<time.h>`。
阅读全文