用C語言編寫一個隨機點名系統
阿新 • • 發佈:2019-01-30
/*編寫一個隨機點名系統,執行該系統後,按空格鍵可以顯示出一名同學,以前被選中的同學,將不會再次被選中*/
#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; } }