哈囉我又來了! 你的問題, 如果只為了當下交出作業就好,
前幾篇的回覆就可以達成你的目的, 不過我還是想改善這幾
篇出現的「壞味道」.
從另外一個角度來看, 若你想挑戰自己印出更豐富的圖形,
或是為了預備老師更刁鑽的作業, 你實在需要更好一點的架
構.
個人認為, 如果只要印出單一字元, 就不要用
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)