百度知道并不是一个提交结果的平台,所谓知道就是将知识贡献,让大家获得启发,不是给人当奴隶干活!
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAXSTUDENT 100
char Name[MAXSTUDENT][16]
int readName(const char * fileName)
{
int pos, slen
FILE *fp = fopen(fileName, "r")
if(fp == NULL) return 0
memset(Name, 0, sizeof(Name))
pos = 0
while(!feof(fp) && pos < MAXSTUDENT)
{
fgets(Name[pos], 16, fp)
slen = strlen(Name[pos])
if(slen > 0)
{
slen--
while(Name[pos][slen] == 10 || Name[pos][slen] == 13) Name[pos][slen--] = 0 //去掉字符串后的换行符
pos++
}
}
printf("读入%d人姓名\n", pos)
fclose(fp)
return pos
}
void main()
{
char fileName[32]
int n, pos, loop
char flag[100]
srand(time(NULL))
printf("请输入学生姓名文件名:")
scanf("%s", fileName)
n = readName(fileName)
if(n==0)
{
printf("读取错误,请确认文件%s是否名是否正确,文件的格式是否正确!\n", fileName)
return
}
getchar()
memset(flag, 0, sizeof(flag))
while(1)
{
pos = rand() % n
loop = 0
while(flag[pos]) // 可以保证每个人都点到一次
{
if(++loop > n) memset(flag, 0, sizeof(flag))
pos = rand() % n
}
flag[pos] = 1
printf("点 %s", Name[pos])
if(getchar() != 10) break
}
}