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

1.本章學習總結

1.1思惟導圖

1.2本章學習體會

這兩週,咱們學習告終構體和文件,相對於文件來講,我認爲結構體是簡單的,可能也是由於學習文件的時候老師上課的進度快,再加上這幾周都沒了課前預習的題集,也沒有課後在進行復習,也有一種得過且過的態度在那裏,對文件就不是很瞭解。課前老師有讓咱們看視頻預習,當時視頻是看了一半,有一半沒看,因此只對看了視頻的那部分熟悉一點。

2.大做業

本次做業要求對小學四則運算程序功能擴展。 擴展功能:小學生用戶登陸進系統作題。結束答題後,能把該學生答題狀況寫入文件,並實現排名。數組

2.1文件介紹

1.頭文件

  • user.h
    頭文件中包含了兩個結構體變量:USER 和 DETAIL。還有主函數中調用的全部函數聲明。
    USER:包含了用戶名和用戶密碼,主要用於用戶登陸和註冊時的判斷與寫入文件。
    DETAIL:包含了用戶名、正確題數、所選等級和正確率,用來儲存用戶數據,讀取和寫入ranking.txt文件數據。
  • 代碼截圖

2.其餘文件介紹

文件1:main.c

  • 文件功能
調用各個函數,將各個函數進行關聯,實現函數功能。
  • 設計思路
開頭和結尾分別調用兩個函數Register(登錄、註冊用戶)和 Ranking(實現排名) 。中間則是原來指針版的程序稍做改進。運行一次實現一個用戶刷題。
  • 截圖

文件2:functions.c

  • 介紹文件功能
1.登錄後,進入遊戲界面,選擇遊戲難度;
2.建立表達式的字符數組,判斷表達式是否合法後,輸出表達式;
3.計算user.txt 和 ranking.txt 兩個文件中的用戶數量。
  • 設計思路
    • CreateExp函數思路
    根據用戶輸入的等級進行表達式的隨機生成,並存入數組exp中,返回指針exp。
    • IsExp函數思路
    根據判斷除數是否爲0及除法是否能整除這兩個條件,判斷算術表達式是否合法
    • ComputeExp函數思路
    利用課堂派上作過的一道題的思路,進行計算隨機產生的字符表達式,並返回正確結果,用於判斷用戶輸入的答案是否正確。
    • getCount函數思路
    藉助了書本上的相關例題,該函數主要用於計算文件user.txt 和 ranking.txt 這兩個文件中的用戶數量
  • 截圖




文件3:login.c函數

  • 介紹文件功能
1.用戶的登錄與註冊
2.用戶的答題狀況及成績
  • 設計思路
    • Register函數
    當初寫這個函數代碼的時候,想着user.txt這個文件又要可讀,又要可寫,還不能消除用戶信息,而後想着直接在程序中建立文件,就直接用了 a+ 的讀寫方式打開建立文件。而後頭尾不可少的打開和關閉文件,中間則是空文件時直接註冊用戶,不是空文件時,可選擇是登錄已有帳號,或者從新註冊新的帳號。
    • Ranking函數思路
    該函數主要用於用戶遊戲存檔,並將存檔內的全部用戶進行排名。
  • 截圖




2.2運行結果

1.登錄界面

2.排名結果

2.3改進大做業總結

1.碰到的問題及解決辦法

此次的大做業其實遇到了不少的問題,解決了一小部分,但依然還有一部分的問題沒有解決學習

  • 寫完全部代碼,第一次進行運行的時候很是的完美,什麼問題都沒有出現,用戶信息很好的保存在了兩個文件中,排名框也有顯示。可是當我再次運行的時候,由於文件不是空文件了,就執行我所寫的下一段代碼,發現用戶登錄沒法登錄已有用戶,註冊了的用戶沒法再寫入文檔。後來調試的時候發現,我定義用來計算用戶數量的全局變量Count在程序結束後就消失了並不會保存。因而我就借用書本上的方法,用文件大小除以結構體大小的方法求得了用戶的數量(也就是functions,c文件中的getCount函數)而後發現個人文件讀取出了點小錯誤,改正後這個函數就又能夠正常運行了。(後來爲何註冊信息能夠寫入文檔我也不知道)。
  • 正當我爲消滅掉一個bug而感到開心的時候,Register函數又出了毛病,他只能判斷出文件中的第一個用戶數據,若輸入一個文件中已有的用戶,但該用戶不在第一個,則會判斷不出來。然而這個bug我試了無數種辦法,都沒有解決。而後這時候,註冊的用戶忽然又不能寫入文檔。
  • 接着就是Ranking函數他每次只有一個用戶信息的輸出,在個人大改特改之下,他能夠讀取文件,能夠輸出表格,寫入文檔的數據也是對的,可是隻有表格的第一行是正確的。其他的都出錯了(以下圖)幾番改動無果,而後我只好把代碼改回原來那樣(雖然只有當前用戶輸出,但至少是對的)

2.小結

  • 其實吧,我以爲整體上,個人大做業算是沒完成的,錯誤、bug一堆堆。
  • 關於遊戲上的代碼並無多大的改動,只是稍做調整,使其可以更好的與文件相關聯。
  • 作完這充滿錯誤的大做業,我對文件仍是不夠了解。有一種道理我都懂,用法也能看懂,可是用起來都是錯的無力感。被bug煩得沒思路的時候確實去借鑑了其餘同窗的代碼,然並卵。我以爲個人用法並無錯,但是程序運行出來就是錯的,我也很絕望。不過仍是得好好研究文件得相關知識點,畢竟還有課設也要用到文件。加油!!
相關文章
相關標籤/搜索