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