printf("%.*s\n",i,"*****");
%3.2f =印出 ###.## 的浮點數... 3 表示向右對齊3位, 不足的話補空白.
若是 小數 3.1415926 -> 會印出 "^^3.14" ( '^' 為空白)
也就是說, '.' 後面的數字會決定要印出幾位數.
'*' 用在'.' 點之後可以讓下一個引數代入這個數字中.
同樣套用在字串中: %3.2s (s="ABCDEF") 會印出 " AB"
for(i=5;i>0;i--)
printf("%.*s\n",i,"*****");
第1次, i=5, 代入*中, 則為 %.5s, 印出 "*****" 5個*號
第2次, i=4, 代入*中, 則為 %.4s, 印出 "*****" 4個*號
第3次, i=3, 代入*中, 則為 %.3s, 印出 "*****" 3個*號
第4次, i=2, 代入*中, 則為 %.2s, 印出 "*****" 2個*號
第5次, i=1, 代入*中, 則為 %.1s, 印出 "*****" 1個*號
結果變成了:
*****
****
***
**
*
若再改寫一下:
for(i=5;i>0;i--)
printf("%5.*s\n",i,"*****");
加個5, 就會反過來印了.
http://www.math.thu.edu.tw/~aki/data/printf.pdf
tenyi wrote:
BTW,main的傳回值請用int,void是msdos錯誤的寫法。(恕刪)
這要看toolchain特性跟撰寫程式的性質
並非是msdos下的錯誤寫法
main 的 return 是給母行程參考
non-os的情況下並沒有 shell 或 command 之類的東西
程式執行也可能沒有母行程
甚至 compiler 不允許 main 改用 void 以外的宣告
standia01 wrote:
for( int i=0; i<5; ++i )
fprintf( stdout, "*****\n" +i );
這個寫法倒是很直接...等同 "*****\n"[i]
效率也比 printf 內帶 * 方式好
而且附帶一點...每家toolchin的printf不見得format會相同
話說回來...不帶指標的寫法....只考慮 '*' 跟 '\n' 的ASCII數值取一個還是可以做到
但用 printf 的 formating output 方式還是脫不了指標
至於單一變數....這我到還沒想到...不過應該可以找到這樣規則的f(x)才對
我是這樣考慮
55 54 53 52 51 50
44 43 42 41 40
33 32 31 30
22 21 20
11 10
想辦法產生上面的數列...被10整除的輸出 '\n' 其餘則是 '*'
i 數值的變化有兩種 -1 (i!=0) 跟 -10 (i==0)
不過不能用到 if 也就表示 ? 運算也不能用
同 '*' 跟 '\n' 的處理 ......根據 i 的狀態選擇 -1 or -10 還是可以用一般運算式表示出來
阿福仔仔 wrote:
這要看toolcha...(恕刪)
嗯, 你這篇有說到重點, void的解釋很正確. 至於"*****"+i 一類的寫法要看授課老師的認定, 要我的話嘛, "*****"-->算是用到陣列, "+i"算是用到指標. 所以, 還要看老師教了些什麼, 才能判斷倒底是想讓學生怎麼做.
至於之前嘛, printf("%.*s\n", i, "*****")也是類似, 由於C本身沒"字串"這種格式, 因此"*****"都算是放在陣列裡(即便只是記憶體當中暫時的地方, 還是依陣列格式存方). 當然, 也許老師沒那麼挑, 把它認定為是某種"常數"也說不定.
公喵不帥, 母喵不愛. 公喵愈壞, 母喵愈愛. 不帥的公喵想要母喵愛, 就只好學壞.
內文搜尋

X