1.檔案原有資訊覆蓋問題(可以直接看2.檔案獲取資料錯亂或無法獲取檔案資料 和 3.程式異常終止)
檔案讀寫模式:引自菜鳥教程
主要注意 r+,w+的區別2.儲存到檔案或者從檔案中獲取的資料錯亂,或者沒有獲得資料以w+方式開啟,原檔案內容一開啟就被刪除
原因:1.儲存該資料的變數本身就沒有獲取到資料,不然就是輸出語句錯了,改下輸出語句就好了。
解決方法:①利用scanf和fscanf的返回值來判斷是否成功讀取資料
例如:
if
(scanf
("%d %d %s"
,&i,
&n,s)==3
)//換為fscanf同理
else
從以上**可得到,一直輸入資料直到輸入正確為止的**fflush()在標頭檔案#include
while
(scanf
("%d %s %c"
,&data.snum, data.name,
&data.***,)!=
3)//資料輸入異常處理
//資料輸入異常處理
如果資料獲取或者輸入錯誤原因(解決方法)如下:
①.從檔案中獲取的資料格式或者鍵盤輸入資料的格式和fscanf()/scanf()中 「」 內格式不同:例如中英文空格不同,%s不讀空格,%c什麼都讀(盡量不用%c,建議換成%s等,%c會讀取到上次輸入輸出的回車或其他符號,和緩衝區的符號,而導致其他資料讀入出錯),並且記住檔案掃瞄資料時,檔案指標會向後移動。
②.你沒有成功開啟該檔案:在呼叫獲取檔案資料的函式前,這個檔案已經被上部分**開啟了,並且還沒關閉,所以呼叫的函式不能再開啟檔案,也就獲取不到資料。
建議對使用的檔案,即用即關,別放到最後再關
2.fopen函式內的寫入檔案路徑錯誤,如果文件中的程式**的.cpp檔案,沒有和要開啟檔案在乙個磁碟內,就要把絕對路徑寫出來,如果在乙個磁碟內,寫相對路徑就可以了。
關於列印到檔案的中文出現亂碼,解決方法csdn上其他人部落格有講。3.除錯程式時程式異常終止,或者一直卡在某個模組不動
尋找bug區域的個人方法
當程式異常,且沒有錯誤提示。那你就要自己對可能錯誤的地方進行分析,對**可能出錯區域寫上幾個printf看看哪個printf沒有輸出,問題就在哪,重複幾次縮小範圍就能找到程式卡住了的**區域,之後可以把**單獨建立乙個專案來測試。
個人遇到的錯誤一般有如下兩種可能
1。異常終止:如果你使用了鍊錶,可能是鍊錶指向下乙個結點的位址沒有賦值為null或者已經申請到的空間的位址,如果沒有賦值,取得隨機值可能會指向不允許被訪問的記憶體區域,就會導致程式提前終止。
2.死迴圈或者**對某種情況缺少考慮,最後乙個結點的next不為null,就會一直迴圈下去,
解決方法:1,建議每次申請乙個記憶體就讓它的->next = null;你可能會覺得,我之後還有別的語句給他賦值,但那些語句賦值前你自己可能寫了條件的,萬一某種可能沒考慮到,沒賦值那不就涼了。
2,可能你的鍊錶遍歷函式,或者其它對鍊錶進行操作的函式如,插入、建立鍊錶等函式,不完善。看看**有沒有考慮到,空表、頭結點,尾結點,有你沒考慮到所有的可能的遍歷形式,或結點數量,導致遍歷一直進行,或者提前終止,可以單獨拿出這段**,做個函式測試。
下面是乙個從檔案中獲取資訊並用鍊錶儲存的函式,函式返回值為表頭位址。裡面從first->next的結點才開始存檔案資料
node *
getfileinformation
(char filename)
if(fscanf
(f2,
"%d %s %c %d-%d-%d %d %d %d"
,&s -> data.snum, s -> data.name,
&s->data.***,
&s-> data.birthday.year,
&s -> data.birthday.month,
&s -> data.birthday.day,
&s -> data .score[0]
,&s -> data.score[1]
,&s -> data.score[2]
)==9)
//確定鍊錶是否獲取到正確的資料
else
//檔案格式錯誤提示
error++;}
}fclose
(f2)
;return first;
}
總結
編寫程式出錯很正常,很大原因是知識掌握的不透徹。再加上,你寫個幾百行的**,不出錯才怪。
1.看到或學到乙個函式,或者知識,最好弄清它的各種用法,和其他用法,不要想當然的去用,不然很容易出錯,不懂就查就問,不要憑感覺,**要有嚴謹的邏輯,不然你錯了哪了都不知道。
2.在做**量比較多的題目,還是要分布除錯,確保每步都正確,(大佬那就另說了)不要以為這浪費時間,等你都寫完,結果出錯了從幾百行**裡找問題,那你要找多久?不更浪費時間。
3.**還是要經常打,尤其是剛學的,沒幾天就忘的差不多了,到時後做題不得卡死,難受的很。而且不常打**,一看到題目就想吐(本人感受)。還是實踐才能加深記憶,用多了,也就會了。
4.打**也挺枯燥的吧,你可以去校oj.(題庫),或者pta等學習平台刷刷題,你會發現ac的感覺,爽的一匹。學了一些,或者領悟到一些知識技巧,也可以寫在部落格裡,寫的過程也是梳理知識,考察自己的過程,有助於自己更好的掌握。
學生資訊管理系統(C語言)
include includetypedef struct s student student insert student last student head 不傳頭 student order student student head,int student list length 按學號小到大...
C語言實現乙個簡單學生資訊管理系統
學生資訊管理,宣告乙個結構體儲存資訊先。儲存學生資訊的結構體 typedef struct student student 然後呢,增,刪,查,改,顯示,分別封裝為五個函式。其中新增和刪除的部分,為了使資料長度隨函式內增加和刪除的操作改變,傳參時除了陣列指標,陣列的長度也使用指標型傳遞。增 新增學生...
《C 語言基礎》程式閱讀 學生資訊管理系統
返回 賀老師課程教學鏈結 閱讀程式 簡單c 學生資訊管理系統 找出其 現建構函式 友元函式 運算子過載 靜態數成員語法現象出現的位置,仔細體會其用法,在以後的設計中能夠靈活應用有關方法和技巧。include include using namespace std define max 100 cla...