1. 程式人生 > >用C語言編寫一個隨機點名系統

用C語言編寫一個隨機點名系統

/*編寫一個隨機點名系統,執行該系統後,按空格鍵可以顯示出一名同學,以前被選中的同學,將不會再次被選中*/

#include<stdio.h>              /*standard input & output*/
#include <stdlib.h> /*standard libary*/
#include<string.h> /*string*/
#include <conio.h> /*Console Input/Output*/
#include <time.h>
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;
}
}