今天是統一發票開獎的日子,於是就趁這個機會來分享一下我寫的統一發票對獎程式
基本上我是大一上的時候寫這個程式的,當時從成大回台中的時候我大姐就問我可不可以寫一個統一發票的對獎程式,這樣以後不管是她或是老媽在對獎的時候都比較方便
我一開始還不確定我寫不寫得出來,畢竟當時才剛開始接觸程式
不過仔細思考之後發現以我當時的能力應該是寫得出來,只要有基本的輸入與字串比對應該就ok了
加上當時大姐說可以"談"一下酬勞,於是在金錢的誘惑之下(雖然最後是沒有收錢啦)
就寫了這樣的一個統一發票對獎程式,各位有興趣的話可以看一下
不過當時才大一上,功力不夠深厚,可能有人會覺得我的寫法很可笑,也請多多包涵囉
另外因為我希望大家都能夠看懂,所以註解會寫得蠻冗長的
想法:將輸入的數字,以字串的方式進行字串比對,根據結果不同印出不同的金額
/*統一發票對獎程式
作者:Tube
語言:C
日期:忘了,去年的某一天
編譯方式:存成.c檔,直接丟給編譯器編譯即可*/
執行結果(以下號碼都是亂打)
基本上應該還蠻容易看懂這份程式碼的,比較有問題得應該是fgets和strcmp的部分
首先是fgets,他跟scanf最大的不同就是他不會忽略空格,用法是
fgets(陣列名稱,允許字串長度,輸入位置)
舉個例子:
char str[20]; //設一個字串陣列str可裝20個字元
如果我們執行
scanf("%s",&str);
printf("%s",str);
此時我們輸入"hello tube",那麼程式只會印出"hello",因為scanf讀到空格時就會停止讀取
但是如果我們把scanf那行改成
fgets(str,20,stdin); //從鍵盤(stdin,一般情況都是打stdin)輸入字串(最長20個)到str陣列裡
此時我們輸入"hello tube",程式就會乖乖印出"hello tube",因為fgets不會忽略空格
這樣大家應該清楚fgets的用法了吧
接下來是strcmp,顧名思義,他的意思是字串比對(STRing CoMPare)
用法如下
假設有2個字串str1和str2
strcmp(str1,str2); //比對整個str1和str2,如果完全一樣的話就回傳"0"
所以 if (strcmp(number,te1)==0) 的意思就是"如果兩個字串一模一樣的話,就執行下列程式"
至於strncmp的話比較麻煩,其意思是比較特定的字元,直接舉例比較快
strncmp(str1,str2,3); //從str1和str2的第1個字元開始往後比3個字元
所以如果str1是"26635"而str2是"26689"的話就會回傳0,因為前3個字元一樣
而如果是這樣寫:
strncmp(&str1[5],&str2[0],3); //從str1的第6個字元(陣列是從0開始算)和str2的第1個字元開始往後比對3個字元
所以如果str1是"123456789"而str2是"789"的話就會回傳0,因為str1的第6,7,8個字元和str2的第1,2,3個字元都是789
這也就是增開六獎的寫法
這樣相信大家也學會了如何比對字串了
大家再回頭看看對獎程式的程式碼,相信應該都看得懂我在寫啥了吧
不過老實說這程式的實用性不大,我發現我老媽自己對比用這份程式對還要快
無論如何,還是給大家做個參考,有問題歡迎大家一起討論
*2011/7/2補上程式載點,有興趣的人可以下載來玩玩看
(exe檔, 沒有病毒請放心)