目錄一覽
一.使用效果
![]()
![]()
![]()
二.代碼分析\功能分解
1.copyright(製作說明模塊)
①Sleep函數
使用時需要包含頭文件<windows.h>
函數原型:void Sleep(DWORD ms);
Sleep()裏面的單位,是以毫秒爲單位,所以如果想讓函數滯留1秒的話,應該是Sleep(1000)。
copyright模塊功能:聲明版權或者製作說明
-代碼
inline void copyright()
{
cout<<"Program Name: Random Name.\n";
cout<<"Improver: DS\n";
Sleep(500);
cout<<"Get ready.\n"<<endl;
//Sleep(1000);
}
2.input(選擇/輸入模塊)
①fopen函數
使用時需要包含頭文件<stdio.h>或者<cstdio>
函數原型:FILE *fopen(const char *filename, const char *mode);
調用方式:fopen(文件名,使用文件方式)
本程序中使用文件方式有:r(只讀)、w+(讀和寫--指定文件不存在時建立新文件)
②rewind函數
使用時需要包含頭文件<stdio.h>或者<cstdio>
函數原型:void rewind(FILE *fp);
功能: 用rewind函數可以使文件位置標記指向文件開頭
input模塊功能:可以選擇輸入若干名字的方式,1表示可以直接讀取文件;2表示直接在控制檯輸入若干名字
-代碼
inline void input()
{
cout<<"Welcome OVO~\n\n輸入1爲讀取文件(.txt), 輸入2爲手動輸入若干名字.\n";
cin>>temp;
getchar();
if(temp == 1) { //導入txt文本文件
cout<<"請輸入文件名:\n";
cin.getline(filename,MAXN);
fp=fopen(filename,"r"); //讀入文本文件
if(fp==NULL) {
cout<<"無法打開文件!\n";
exit(0);
}
}else{ //手動輸入名字
cout<<"輸入幾個名字(名字間以空格分隔, 以-1結束):\n";
fp=fopen("Test111.txt","w+");
cin>>namestr;
while(namestr[0] != '-') {
fputs(namestr,fp);
fputc('\n',fp);
cin>>namestr;
}
rewind(fp);//使文件位置標記返回文件開頭
}
puts("Everything is ready.\n");
}
3.work(核心工作點模塊)
①fgets函數
使用時需要包含頭文件<stdio.h>或者<cstdio>
函數原型:char *fgets(char *str, int n, FILE *stream);
調用形式: fgets(str, n, fp)
功能: 從fp指向的文件讀入一個長度爲(n-10)的字符串(因爲最後一個放'\0'),存放到字符數組str中
②sscanf函數
使用時需要包含頭文件<stdio.h>或者<cstdio>
函數原型:int sscanf(const char *buffer , const char *format , [argument ]...);
功能:從一個字符串中讀進與指定格式相符的數據的函數,即sscanf會從buffer裏讀取數據,依照format的格式將數據寫入到argument裏
③getch函數
使用時需要包含頭文件<conio.h>
函數原型:int getch(void)
功能:從控制檯讀取一個字符,但不顯示在屏幕上,此程序用這個來判斷用戶是否按下空格以決定是否開始輸出隨機名
④隨機數產生函數(time函數、srand函數 和 rand函數)---核心!
- time函數
使用時需要包含頭文件<time.h>
函數原型: time_t time(time_t *timer)
time(0)的返回的是從1970 UTC Jan 1 00:00到當前時刻的秒數,爲unsigned int類型 - srand函數
使用時需要包含頭文件<stdlib.h>
函數原型:void srand(unsigned int seed);
srand()爲初始化隨機數發生器,用於設置rand()產生隨機數時的種子。
如果不調用srand()的話,默認爲srand(1),也就是seed是固定的,那麼多次運行固定seed的程序rand()所得到的結果是不變的 - rand函數
使用時需要包含頭文件<stdlib.h>
函數原型:int
rand
(
void);
rand()函數不需要任何參數,直接返回一個隨機數,注意,這個隨機數是有範圍的,在0~RAND_MAX之間,RAND_MAX一般最小取值爲32767,其具體值在頭文件stdlib.h中進行定義
④實現防止重複抽取功能
while(occupy[randnum]) randnum=rand()%cnt;
occupy[randnum]=true;
work模塊功能:實現讀入名字信息和隨機抽取不重複的人名
-代碼
inline void work()
{
while(fgets(line,sizeof(line),fp)) if(line[0]!='\n'&&line[0]!=' ') sscanf(line,"%s\n",info[cnt++].name);//input information
cout<<"按下空格生成一個隨機名字,按其它鍵則退出程序.\n";
srand(time(0));//time(0)的返回的是從1970 UTC Jan 1 00:00到當前時刻的秒數,爲unsigned int類型
while((ch=getch())==' ') //實現隨機功能的核心部分!
{
int randnum=rand()%cnt; //產生隨機數randnum
while(occupy[randnum]) randnum=rand()%cnt; //實現防止重複抽取功能
occupy[randnum]=true;
printf("%s\n",info[randnum].name);
system("pause");//從程序裏調用“pause”命令。
if(++num==cnt)
{
puts("~Program has been exited.\n");
puts("~Thank you for your using.\n");
return ;
}
}
}
4.main(主函數)
-代碼
int main()
{
copyright();//Production instructions 製作說明模塊
input();//Input module 輸入模塊
work();//Core work points 核心工作點模塊
fclose(fp);//關閉數據文件
return 0;
}
三.完整源碼\資源下載
歡迎去我的資源進行下載(有源碼和exe),你的點贊是我莫大的動力~