/*编写一个随机点名系统,运行该系统后,按空格键可以显示出一名同学,以前被选中的同学,将不会再次被选中*/
#include /*standard input & output*/
#include /*standard libary*/
#include /*string*/
#include /*Console Input/Output*/
#include
struct studentinfo /*学生信息的结构体*/
{
char sNo[5]; /*学生编号*/
char sxueNo[14];/*学号*/
char sname[20];/*学生的姓名*/
}st[100];
char hash[100] = {0}; /*链表的数组*/
int main()
{
int i=0,j=0,flag = 0,RN,*a;
FILE *fp;
char ch,filename[20]={0},line[100]={0};
printf("Please input file name:");
//fflush(stdin); /*用来清空输入缓存,以便不影响后面输入的东西*/
gets(filename); /*键盘输入文件名*/
fp=fopen(filename,"r"); /*open readonly*/
printf("名单如下:\n"); /*显示所有的学生信息*/
while (fgets(line,sizeof(line)-1,fp))
{
if (line[0]!='\n' && line[0]!=' ')
{
sscanf(line,"%s %s %s\n",st[i].sNo,st[i].sxueNo,st[i].sname); /*文件输入*/
printf("%s\n%s\n%s\n",st[i].sNo,st[i].sxueNo,st[i].sname);/*打印出来*/
i++; /*统计人数*/
}
}
/*设置随机数种子*/
srand((unsigned)time(NULL));
/*sizeof(类型符)是计算类型所占字节数,sizeof(int)是int所占字节数,再
乘以i,得到i个int型数据的总字节数。malloc函数用于动态开辟一块内存空间,
参数为开辟的内存空间字节数,返回开辟的内存空间的首地址指针。*/
a=(int*)malloc(sizeof(int)*i);
memset(a,-1,sizeof(a));/*将已开辟内存空间a的第4个字节设置为-1*/
printf("按空格键点名,其他键退出:");
fflush(stdin);
while((ch=getch())== ' ')
/*while (!(ch=getch())==NULL)*/
{
if(flag==i) /*如果flag等于总人数*/
{
printf("%s\n","点名结束");
break;
}
RN=rand()%i; /*产生一个随机数*/
while(hash[RN]==1)/*判断有没有完成某个一个学生点名*/
RN=rand()%i; /*产生随机数*/
flag++; /*计数*/
printf("\n~~~~~\n%s\n%s\n%s\n------------\n",st[RN].sNo,st[RN].sxueNo,st[RN].sname); /*输出学生的信息*/
hash[RN]=1;
}
}