拿到這個項目的時候,我第一反應是用鏈表嵌套鏈表的結構,這樣對于各項功能的實現都很方便,結果后來還是沒弄出來,白白浪費了一天的時間。我的邏輯思維是沒錯的,但是這個鏈表嵌套鏈表還是有很大難點的,等不忙了再研究研究。 大多數的錯誤就是段錯誤,最典型的是理武兄的問題,鏈表head沒有開空間,還有一個典型錯誤是數組賦值 ,一定要加&,不加&編譯時不會報錯,但是運行會出現段錯誤。還有就是坑了我的錯誤命令gcc –o main.c a.out –Wall。 我犯的最大的小錯誤,是在讀取文件的時候,想判斷管理員密碼是否為’”\0”,如果是”\0”,則默認初始密碼,如果不為0,則將文件中保存密碼賦值給管理員,我的源代碼是這樣的 int load(stu_t *head,char (*admin)[30]){ stu_t*cur = NULL,*cur2=NULL; FILE*fp = NULL; charad_pass[30] = "\0"; inti=0; if(NULL== head){ return; } fp=fopen("data","a+"); if(NULL== fp){ fclose(fp); return1; } fread(ad_pass,sizeof(char)*30,1,fp); //讀取管理員密碼 if(ad_pass,!= ‘\0’){ strcpy(admin[1],ad_pass); for(i=0;admin[1][ i]!= '\0';i++){ admin[1][ i]-= 'a'; //管理員密碼解密,每一位減'a' } } ……省略 咋一看,覺得沒錯,編譯也沒報錯,但是就是管理員賬戶密碼一直無法登陸,后來在老師的指引下,我知道了自己犯的錯誤。其中還發現一個嚴重的問題,就是我的語言組織能力不好,不能一句話切入重點,就像毛毛說的,總是有很多鋪墊。。。。正確的代碼應該是下面這樣,ad_pass 是一個字符數組,ad_pass是首地址,我要判斷它是否為空,應該比較兩個數組才對,可是我判斷的是首地址。。。。然后就這么錯了。 if(strcmp(ad_pass,"\0") != 0){ strcpy(admin[1],ad_pass); for(i=0;admin[1][ i]!= '\0';i++){ admin[1][ i]-= 'a'; //管理員密碼解密,每一位減'a' } 還有,今天寫驗證碼函數,又寫錯了,一直提示驗證碼輸入錯誤。還有每個函數都要 有入參驗證,其他的就沒什么了,有些第一次遇到的問題,也根據自己的經驗寫出了算法。總的來說,還是相對輕松的。
還有一個面試官可能問到的問題,大概程序如下: 2.int main(){ stu_t *user = NULL,cur = NULL; if(use(create(sizeof(stu_t)))!=0){ func1();…… func2…… inserte_head(user,cur); } 問:user是否為空? user 沒有賦值語句,沒有開空間,當然是空的,不能被表面現象蒙蔽了雙眼。 還有一個問題,就是寫一個函數,修改指針的值,一定要是指向指針的指針。逐級加一個指針。這個是我們老師曾經這么干過,
|