【樣本】
【評析】
標題明顯漏印了兩個字——“垃圾”,應為‘垃圾程序是怎樣練成的’。
所提出的問題本身尚有一些不明確之處,有些必要的前提條件沒有交待。比如關鍵詞的最大長度。對關鍵詞的長度有無限定,會得到截然不同的代碼。
注意,問題的要求是“按照從大到小的順序將這些文件名輸出到屏幕和結果文件”。
【樣本】
【評析】
這里的128和1024*128都是來歷不明的MagicNumber。128作為文件名的長度可能尚有情可原,1024*128絕對是“天外飛仙”了。估計是作者當時一咬牙一跺腳硬憋出來的。
這個txtfile結構的設計本身也莫名其妙。統計詞頻為什么要弄這么大一個數組呢?百思不得其解。后來才猜到作者的意圖是把文件讀到數組中之后再統計詞頻。這個想法實在太奇葩了,簡直是奇葩中的奇葩。數一篇文章中有多少字,居然想到要先把文章背下來。幼兒園的孩子也不會想出如此弱智的辦法吧?
【樣本】
【評析】
果不其然,真的把文件的內容讀到數組中了。
看來一個人愚蠢並不難,難的是能把愚蠢的想法貫徹到底。比這更難的呢?則是敢於把這種愚蠢印在書上欺騙不懂事的小朋友。然而這些都還不是最難的,最難的是敢於把這種印在書上欺騙小朋友的愚蠢說成是“實戰,可以讓你養成良好且符合業界標准的編程習慣和編程思想,為今后的繼續前行打下必要的基礎”(該書策划編輯陳冰語,P1~2)。TMD,給人家挖了一個深不見底的大坑,騙人家跳下去,還說是幫人家打“基礎”。這“基礎”打的也太深了吧,都特么打到海平面以下去了。
即使拋開這個愚蠢的構思不談,只從代碼的角度考察,這個函數也是漏洞百出。
首先
//參數合法性檢查 if(NULL == file ) return ;
當參數不合法時,函數就跟參數合法時一樣地若無其事地返回了。那這個“參數合法性檢查”還有什么意義?不就是一副聾子的耳朵嗎?這就像派一個人檢查火災隱患,這個發現了火災隱患但卻一聲不吭知情不報一樣。所以,從這個角度看,這里的“參數合法性檢查”是形同虛設的裝腔作勢,無論如何都必然會瀆職。
同樣,當fp為NULL即文件打開失敗時,這個函數同樣悄然無聲地就像萬事大吉一樣地返回了。這樣一來,if(NULL!=fp)就跟馬戲團里的猴子敬禮一樣滑稽了:雖然裝得很像那么回事,但其實並沒有禮貌的含義,無非是東施效顰一樣裝模作樣擺出的一個姿態罷了。
【樣本】
【評析】
這段代碼更滑稽,filecount與files本是互不相干的兩個數據對象,但在
for(int i = 0;i<filecuont;i++)
中,代碼作者硬生生地亂點鴛鴦譜,把filecount說成是files的尺寸,然而files實際上有自己的尺寸,那就是sizeof files/sizeof files[0]。所以這段代碼就跟硬是給四肢健全的狗裝假肢一樣荒唐。