看板 C_and_CPP 關於我們 聯絡資訊
哈囉我又來了! 你的問題, 如果只為了當下交出作業就好, 前幾篇的回覆就可以達成你的目的, 不過我還是想改善這幾 篇出現的「壞味道」. 從另外一個角度來看, 若你想挑戰自己印出更豐富的圖形, 或是為了預備老師更刁鑽的作業, 你實在需要更好一點的架 構. 個人認為, 如果只要印出單一字元, 就不要用 printf("%c", '*'); printf("*"); 等寫法, 除了在分析格式字串所耗費的時間外, 你也沒有跟 看程式碼的人說明「我就是要印字元」這個重要的事實. 他 還要仔細去看你字串裡面有什麼東西才能理出個頭緒, 可以 使用 putchar('*'); 來取代 除非你是想磨練看程式碼的人的功力, 兩層的迴圈真的已經 算是極限, 但是為了這麼簡單的作業就把「循環複雜度」提 高成這樣, 實在很不值得. 當然很多人會說「把迴圈萃取出 來寫一個函式」, 這是一個好方法! 中間也有一些冠冕堂皇 的理由, 不過現實來講, 最明顯的好處就是 1.把函式呼叫複製貼上再修改比較不容易出錯 我把重複印出字元的程式碼分開寫成函式, 因為標準庫有一 個 putchar 了, 我把它取名成 putChars, 參數使用的慣例 是先把要印的字元傳進去, 再傳要重複的個數, 他長成這樣 void putChars( char c, int n ) { for( ; n > 0; --n ) putchar( c ); } 這樣任意字元跟個數的搭配你都能處理了, 有了這個組件你 未來也可以用來解決更多問題, 回到原問題, 程式碼長這樣 http://codepad.org/H2rty4jZ 多了 spaceCount、starCount是為了說明後面的程式碼的意 圖, putChars 擺成一行是為了「在程式碼中呈現畫面結構」 , 是空白s後面跟著星星s 就像有些人會把 printf 寫成這樣 printf("%s : %s\n%s : %d.\n", "your name is", "Adam", "your age is", 13 ); 而不是 printf("your name is : %s\nyour age is : %d.\n", "Adam", 13 ); 現在這個時代變數命名等, 打得愈長愈好, 千萬不要讓畫面 留白, 程式要寫得跟虛擬碼差不多, 這樣註解也可以不用額 外再想, 也不要在程式碼中用很炫的計算公式還是特殊做法 , 「連你阿嬤都看得懂」那就已經成功了! 至於模板版..本來很想附的, 但是用遞迴展開會增加理解困 難度, 只適合自己在練習時使用. -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢█歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (11/07 01:06)