去某互連網公司營運部面試,看似非常簡單的一道題,我雖然五分鐘內寫了出來,但錯誤很多,還好面官只指出了一兩個。更不要說運行了!最近準備求職,昨晚變拿來上機實踐,結果兩個多小時沒挑通。晚上睡覺十二點多,還起來改了改,但仍然不完全正確,今日早飯後,又調試一小時,終於成功!拿來分享!
首先,總結經驗:1、動筆前一定要深思熟慮,這比邊寫邊改實際要節約時間!
2、如果基本確認是語法錯誤,可以慢慢調,如果自己邏輯都不清楚,乾脆重來!要有重構的勇氣!
1 #include<stdio.h> 2 //程式功能,將“192.168.1.29”之類的IP轉化為(相當與去掉小數點後的)整數 3 int main(){ 4 5 char ip[]="0.3.2.1.";//如果你的機器sizeof(int)是2位元組,還要考慮溢出問題! 6 7 int sum=0,i=0,j=0,n=0;//erroor1:i不初始化,以後一但下標越界就是段錯誤! 8 int cnt=4; 9 char tmp[4];10 11 while(cnt>0){12 int tmpsum=0;//不要只記得開始的sum初始化,任何邊寫邊新曾的變數都要初始化,否則結果不對!13 14 if(ip[j]!='.'){15 tmp[i]=ip[j]; 16 //printf("%c\n",ip[j]);17 i++;j++;18 }else{19 i=0;j++; 20 tmpsum=atoi(tmp);21 //printf("*%d\n",tmpsum);22 if (cnt!=1){23 for(n=cnt-1;n>=1;n--)24 tmpsum*=256;25 printf("**%d\n",tmpsum);26 }27 cnt--; 28 }29 30 sum+=tmpsum;31 //printf("***%d\n",tmpsum);//32 }33 printf("%d\n",sum);34 return 0;35 }
今天還學到了gdb偵錯工具的知識,以前懶得做非IDE下的調試,今天看到陳皓的《用GDB偵錯工具》系列文章,向大家推薦!