Re: [問題] 排版用 '\b' 倒退但沒有效果
※ 引述《BestFr (ㄚ元)》之銘言:
: 想請問一下,我在執行的時候總票數加總沒問題,可是在顯示出來時,
: 總票數卻跟在下一行的人名前面,一開始是想用 "\b" 讓他到退一格,
: 結果沒出現任何變化,可是用了"\t "之後卻有反應,不知道問題出在哪裡?
: 還請會的人教一下 感恩!!!
: 目前剛學程式,觀念都很薄弱.....請見諒
: 程式碼(Code):(請善用置底文網頁, 記得排版) :http://tinyurl.com/koflkaz
不知為何數小時前 codepad 一直打不開...
總之看到程式了
有件事情要先說
沒寫在 printf 裡的字並不會自動加上去
(不像某語言還要特別說一下我不想換行...)
我的意思是說 如果想要在這裡換行 請把 \n 寫進 printf 裡去
這支程式的 for 迴圈裡全部都沒有 \n 所以所有印出來的東西會擠在同一行
而之所以會誤以為有換行其實是你擺在中間的 scanf 的關係
這裡又是另一個問題: 在格式化輸出當中混進輸入的程式
這會很難掌握實際輸出的報表的樣子
基本上可以在表頭前面就用一個 for 來輸入資料
而不要像這支程式一樣把輸入混在報表輸出當中
這種寫法雖然不是說無法讓結果好看
但對一個初學者而言
輸出入分開處理在程式流程及結構的掌握上會比混在一起來得容易理解
(不過寫 online judge 則又是另外一回事了, 這裡表過不提)
第三個問題是第 6 行的陣列宣告
你應該有學到過陣列宣告時就需要給定大小
像這支程式一共有四個人的票數要計算 陣列大小就必須要開好 a[4] 在那裡
而不是寫 a[0] 然後自以為程式會幫你開好一切
講到 a b c 這三個陣列又是另一個問題
這種二維表格的資料最適合的是二維陣列
不過如果還沒學到二維陣列也沒關係
但至少不要取 a b c 這種你以後回來看還要想一下的名字
像是 ticket1 ticket2 ticket3 之類的名字都比 a b c 有意義多了
(第 7 行的 personTot 這個名字就是一個正面示範
看名字就知道這個陣列存的是各人的總票數)
最後再回到排版的問題上來
其實很多人似乎會誤解 \t 做為排版功能的用途
以為說只要擺上一個 \t 就一定會整齊
事實上 \t 會整齊的前提是不要有資料長過頭
這支程式就是一個最好的例子
假設這支程式已經改成輸出表格的部份當中 每個欄位之後都擺了一個 \t
那輸出結果會變成像是這樣:
歌星姓名 第一地區 第二地區 第三地區 總得票數
========================================================================
周華見 100 200 300 600
劉得華 110 220 330 660
張學有 120 240 360 720
梁朝為 130 260 390 780
這是由於 \t 其實只是把游標前進到下一個定位點而已
現在的 console 設定上定位點都是每 8 個 byte 一個
也就是以像這裡這個 80 字的寬度來說 定位點會在這些地方:
0 0 1 2 3 4 4 5 6 7
1 9 7 5 3 1 9 7 5 3
跟上面的輸出對比一下就會發現 當游標已經進到下一個定位點的時候
再輸出 \t 會讓游標更往後跳
例如輸出 " 歌星姓名" 之後 游標已經到了第 10 格 所以 \t 一跳就是第 17 格
但輸出 "周華見" 之後 游標只在第 7 格 所以 \t 只跳到第 9 格
這就是造成上面這樣的輸出的原因
解決的辦法 除非對輸出的資料有很大的把握
或是所輸出的 \t 不是拿來排表格 (例如輸出程式碼縮排的狀況)
或是那個輸出是給其他程式看 只吃 \t 不管實際上的排版的
要不然這種排版請用 %10s 這種方式指定輸出寬度 (這個應該有學到吧?)
這樣才能百分之百掌握所輸出的表格的大小
然後請不要用 \b 那個是特殊狀況才會用得到的
而且會跟你想像的結果不太一樣...
大致上就是這些問題了
--
LPH [acronym]
= Let Program Heal us
-- New Uncyclopedian Dictionary, Minmei Publishing Co.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.118.138.54
推
06/09 20:53, , 1F
06/09 20:53, 1F
推
06/09 21:22, , 2F
06/09 21:22, 2F
推
06/09 21:50, , 3F
06/09 21:50, 3F
推
06/09 21:55, , 4F
06/09 21:55, 4F
推
06/10 00:28, , 5F
06/10 00:28, 5F
推
06/10 01:14, , 6F
06/10 01:14, 6F
推
06/10 08:00, , 7F
06/10 08:00, 7F
推
06/14 08:05, , 8F
06/14 08:05, 8F
推
06/14 15:41, , 9F
06/14 15:41, 9F
→
06/14 15:42, , 10F
06/14 15:42, 10F
→
06/14 15:43, , 11F
06/14 15:43, 11F
→
06/17 09:49, , 12F
06/17 09:49, 12F
→
06/17 09:49, , 13F
06/17 09:49, 13F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):