在這一章的學習中,我瞭解到告終構體在C語言中的初步運用,利用結構體來將多個變量統一塊兒來,有利於變量之間的傳遞交互,也學會了將結構體與指針結合起來,提升函數之間的傳遞效率。
除此以外,還學習了文件方面的知識,懂得了如何將數據存儲到文件裏面,和從文件中讀取數據,由此來實現更多有趣的功能,如遊戲系統的排名,帳戶的登錄和註冊等等。數組
我將頭文件的名字命名爲counter.h,在這個頭文件裏,我定義了兩個結構體類型緩存
Details :該結構體用於最後排名的信息存儲,其中包括用戶的暱稱,正確題目數量,選擇的難度等級,正確率,以及做答的日期。函數
User :該結構體用於登錄系統的驗證,其中包括用戶的暱稱,以及密碼。工具
文件功能:學習
1.調用其餘文件的函數,實現目標功能。
2.定義變量,並經過指針的形式傳送到各個函數中去,進行計算。大數據
思路:利用while循環不斷重複表達式的製造與驗證函數,達到重複作題的目的,再在中間插入一些功能性函數,豐富體驗優化
截圖:3d
文件功能:指針
1.對註冊用戶登記並寫入user.txt文件
2.對登錄用戶驗證blog
login函數思路:
1.首先對文件進行檢測,若是user.txt文件不存在,就引導用戶註冊,存在就以只讀打開。
2.讀入用戶輸入的用戶名以及密碼,對輸入長度的限制,本來想使用fgets來限制長度,後來發現當長度達不到規定長度時,會把回車也讀進去,影響到後面排名的展現,因此乾脆本身寫了一段代碼來使用。
3.再從文件中逐個讀取用戶數據與先前用戶輸入的數據進行比較,判斷是否正確,是就放行。
Register函數思路:
1.該函數比較簡單,採用同login同樣的輸入方式,將讀取的數據追加在user.txt文件的末尾,直接以該用戶登錄。
2.在用戶輸入完暱稱後,將在用戶文件中進行查找,看是否用戶名已存在。
menu函數思路:
該函數主要是對前兩個函數的整合,並調用Messagebox函數對用戶的選擇進行判斷,這樣作有一個好處就是規避了採用輸入菜單時的不規範輸入。
對函數的返回值判斷就能夠知道用戶的選擇。
截圖:
文件功能:
1.依照等級創做表達式,傳入IsExp函數判斷
2.判斷表達式是否正確,並去除前導零
3.開始遊戲,先計算結果並記錄時間,在用戶輸入完畢後判斷答案是否正確,是否超時。
ComputeExp函數思路:
先將數字和字符所有提取出來,而後依據運算符的優先級分狀況討論,結果存儲在number[0]並返回
GameStart函數思路:
1.調用函數計算結果,在用戶輸入先後進行對比和判決。
2.將正確與否的結果存儲到right和total變量當中。
3.在輸入方面插入一些代碼優化用戶體驗
IsExp函數思路:
1.將全部數和運算符提取出來,對除法的狀況進行判斷,看有沒有除以0或者除不盡的狀況,有的話對除數進行重構。
2.將修改完的數據存儲到表示中。
截圖:
文件功能:
將用戶最後的成績與ranking.txt文件中的歷史成績進行排名,並將前10輸出到控制檯,而後把這些結果存儲到ranking.txt文件中
rank函數思路:
1.先將ranking.txt的數據讀取出來存儲到一個結構體數組裏面。
2.把用戶成績與歷史成績對比插入並輸出到控制檯。
3.把數據存儲到ranking.txt文件
截圖:
1.在讀取暱稱的時候,fgets會連同回車一併讀取咋整?
動手寫一個讀取,只讀六個字符,末尾補 \0 ,遇到回車就結束,將回車換爲 \0 ,而且清除緩存區。
2.在將日期轉換爲字符串後,當下一個名次沒有人時,會把這一行的回車當作上一行的字符輸入到文件中,致使在不斷的讀取輸入後,會出現排版錯亂?
在讀取數據時挨個讀取,若是遇到空數據就直接跳出循環,再也不從文件裏讀取數據。
3.獲取系統日期時老是少了八個小時,這咋整?
經百度查詢,須要矯正時區,可是個人方法比較簡單粗暴,在時間變量上直接加上86060,這也只是緩兵之計,之後仍是應該用矯正時區的函數來矯正。
在從此的學習中,百度很重要,不論是遇到問題,仍是本身想拓展功能,均可以先求助百度,在這個互聯網高速發展的時代,尤爲是做爲計算機學子的咱們,更應該運用好百度這個大數據搜索工具,來獲取咱們須要的知識,不論是CSDN仍是博客園,都有大量資料。平時在vs上面出現錯誤提示時,都會有一段錯誤代碼,像這種東西就是讓咱們在出現問題又不知道如何解決時,能有地方能夠找。