C語言博客做業06--結構體&文件

1.本章學習總結

1.1思惟導圖

1.2本章學習體會

在這一章的學習中,我瞭解到告終構體在C語言中的初步運用,利用結構體來將多個變量統一塊兒來,有利於變量之間的傳遞交互,也學會了將結構體與指針結合起來,提升函數之間的傳遞效率。
除此以外,還學習了文件方面的知識,懂得了如何將數據存儲到文件裏面,和從文件中讀取數據,由此來實現更多有趣的功能,如遊戲系統的排名,帳戶的登錄和註冊等等。數組

2.大做業

2.1文件介紹

1.頭文件

我將頭文件的名字命名爲counter.h,在這個頭文件裏,我定義了兩個結構體類型緩存

Details :該結構體用於最後排名的信息存儲,其中包括用戶的暱稱,正確題目數量,選擇的難度等級,正確率,以及做答的日期。函數

User :該結構體用於登錄系統的驗證,其中包括用戶的暱稱,以及密碼。工具

2.其餘文件介紹

文件1:main.c

  • 文件功能:學習

    1.調用其餘文件的函數,實現目標功能。
    2.定義變量,並經過指針的形式傳送到各個函數中去,進行計算。大數據

  • 思路:利用while循環不斷重複表達式的製造與驗證函數,達到重複作題的目的,再在中間插入一些功能性函數,豐富體驗優化

  • 截圖:3d

文件2:Login.c

  • 文件功能:指針

    1.對註冊用戶登記並寫入user.txt文件
    2.對登錄用戶驗證blog

  • login函數思路:

    1.首先對文件進行檢測,若是user.txt文件不存在,就引導用戶註冊,存在就以只讀打開。
    2.讀入用戶輸入的用戶名以及密碼,對輸入長度的限制,本來想使用fgets來限制長度,後來發現當長度達不到規定長度時,會把回車也讀進去,影響到後面排名的展現,因此乾脆本身寫了一段代碼來使用。
    3.再從文件中逐個讀取用戶數據與先前用戶輸入的數據進行比較,判斷是否正確,是就放行。

  • Register函數思路:

    1.該函數比較簡單,採用同login同樣的輸入方式,將讀取的數據追加在user.txt文件的末尾,直接以該用戶登錄。
    2.在用戶輸入完暱稱後,將在用戶文件中進行查找,看是否用戶名已存在。

  • menu函數思路:

    該函數主要是對前兩個函數的整合,並調用Messagebox函數對用戶的選擇進行判斷,這樣作有一個好處就是規避了採用輸入菜單時的不規範輸入。
    對函數的返回值判斷就能夠知道用戶的選擇。

  • 截圖:

文件3:ComputeExp.c

  • 文件功能:

    1.依照等級創做表達式,傳入IsExp函數判斷
    2.判斷表達式是否正確,並去除前導零
    3.開始遊戲,先計算結果並記錄時間,在用戶輸入完畢後判斷答案是否正確,是否超時。

  • ComputeExp函數思路:

    先將數字和字符所有提取出來,而後依據運算符的優先級分狀況討論,結果存儲在number[0]並返回

  • GameStart函數思路:

    1.調用函數計算結果,在用戶輸入先後進行對比和判決。
    2.將正確與否的結果存儲到right和total變量當中。
    3.在輸入方面插入一些代碼優化用戶體驗

  • IsExp函數思路:

    1.將全部數和運算符提取出來,對除法的狀況進行判斷,看有沒有除以0或者除不盡的狀況,有的話對除數進行重構。
    2.將修改完的數據存儲到表示中。

  • 截圖:

文件4:ranking.c

  • 文件功能:

    將用戶最後的成績與ranking.txt文件中的歷史成績進行排名,並將前10輸出到控制檯,而後把這些結果存儲到ranking.txt文件中

  • rank函數思路:

    1.先將ranking.txt的數據讀取出來存儲到一個結構體數組裏面。
    2.把用戶成績與歷史成績對比插入並輸出到控制檯。
    3.把數據存儲到ranking.txt文件

  • 截圖:

2.2運行結果

1.登陸界面

2.排名結果

2.3改進大做業總結

1.碰到問題及解決辦法

1.在讀取暱稱的時候,fgets會連同回車一併讀取咋整?

動手寫一個讀取,只讀六個字符,末尾補 \0 ,遇到回車就結束,將回車換爲 \0 ,而且清除緩存區。

2.在將日期轉換爲字符串後,當下一個名次沒有人時,會把這一行的回車當作上一行的字符輸入到文件中,致使在不斷的讀取輸入後,會出現排版錯亂?

在讀取數據時挨個讀取,若是遇到空數據就直接跳出循環,再也不從文件裏讀取數據。

3.獲取系統日期時老是少了八個小時,這咋整?

經百度查詢,須要矯正時區,可是個人方法比較簡單粗暴,在時間變量上直接加上86060,這也只是緩兵之計,之後仍是應該用矯正時區的函數來矯正。

2.小結

在從此的學習中,百度很重要,不論是遇到問題,仍是本身想拓展功能,均可以先求助百度,在這個互聯網高速發展的時代,尤爲是做爲計算機學子的咱們,更應該運用好百度這個大數據搜索工具,來獲取咱們須要的知識,不論是CSDN仍是博客園,都有大量資料。平時在vs上面出現錯誤提示時,都會有一段錯誤代碼,像這種東西就是讓咱們在出現問題又不知道如何解決時,能有地方能夠找。

相關文章
相關標籤/搜索