看板 C_and_CPP 關於我們 聯絡資訊
假如system("pause");用了會有什麼嚴重的後果 那大家就不會用 今天就不會爭論這個話題了 也就是說用了根本不會怎樣 是意識型態問題 XD 其實用這個也不過就是圖個方便 看個結果而已 因為你寫個hello world還要開console出來跑就很麻煩啊 如果用cin.get()的話 你前面還要多加一行 cout<<"按enter鍵關閉"; 還是很麻煩 不要想說你停下來使用者自然會去按enter 他會等很久 以為當了 然後你還要考慮cout多國語言的問題 這是個國際化以及本土化的時代 XD 另外 portable的問題說真的也不嚴重 我試這行在Fedora Core的bash跑起來只是會說找不到pause這個程式 然後繼續執行完 (反過來 在Windows底下用system("orz"); 之類的也是找不到然後跳過而已) 不portable的東西一堆 這種相比之下根本無關緊要 所以不能用system("pause");的場合主要只剩下以下兩點: (1) 1-1. 純粹的command-line模式 不是在圖形介面下旁邊會有捲軸的那種 也就是畫面洗掉就不見了的情況 而且 1-2. 資料超過一頁 必須暫停下來看 而且 1-3. 非Windows (2) 在非Windows的圖形介面底下(KDE之類的)跑這程式 視窗一閃而逝 例如一般用putty連到Linux工作站的情況下 system("pause");大不了只是失效 再捲回去看就好了 而資料太多的時候我會覺得還不如輸出到檔案 跑完再用文字編輯器慢慢看 所以(1)基本上是可以避開 (2)大概就真的無法避開了 那種時候還是用別招吧 總之我的結論是 大部份情況都無害 就用吧 XD -- 補充一點 有沒有覺得我說的理由都不足以說服你棄cin.get()投system("pause")呢 沒錯 差別就是這麼微不足道 XD 所以我一開始就說了 這是意識型態問題 是"我爽用/我不爽用"的問題 XD ※ 引述《That5566is78 (5566反串好累)》之銘言: : 真的不要用system("PAUSE"); ? : http://www.gidnetwork.com/b-61.html : 剛剛無聊GOOGLE c++ SYSTEM PAUSE 跑出的第一個 : 他有幾個理由 : ●Only in DOS & Win : not portable : ●It's a very expensive and resource heavy function call : : 用推土機開門(殺雞用牛刀) : 系統步驟: : 1.suspend your program : 2.call the operating system : 3.open an operating system shell (relaunches the O/S in a sub-process) : 4.the O/S must now find the PAUSE command : 5.allocate the memory to execute the command : 6.execute the command and wait for a keystroke : 7.deallocate the memory : 8.exit the OS : 9.resume your program : ●You must include a header you probably don't need: stdlib.h or cstdlib : Advice: in C :getchatr() : C++:cin.get() : 不知道各位高手覺得如何? : 我是新手 無法提供意見 囧rz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.34.238.72 ※ 編輯: AntaresStar 來自: 218.34.238.72 (05/16 21:11)
hilorrk:大家都認真了...- -|| 05/16 21:17
tinlans:這種東西只會出現在作業吧。而且丟去 UNIX 最多也只是 05/16 21:29
tinlans:找不到 pause 這個程式而已。 05/16 21:29
That5566is78:呵呵 感謝回答 05/16 22:01
VictorTom:就是圖個方便嘛XD 05/16 22:34
VictorTom:Well~~其實我覺得身為助教, 更可以把無論window/linux或 05/16 22:44
VictorTom:者window/console AP這些狀況與緣由介紹給學生知道, 想 05/16 22:45
VictorTom:以前小弟我學的時候也沒什麼書/人會特別提到這個, 尤其 05/16 22:45
VictorTom:以前學程式連proj/link這些都不懂(debug/break/watch倒 05/16 22:48
VictorTom:會), 遙想當年也#include了一個串一個的.cpp.... (遠目 05/16 22:49
yauhh:我想連system()都想要跨平台的,有太追求泛用的傾向,而事實上 05/16 23:01
yauhh:寫程式一開始就走泛用路線會非常累,不容易寫. 05/16 23:02
ji3g45j:恩~雖然圖個方便而已,但這種小細節是展現專業程度的時候 05/16 23:40
ji3g45j:就像1加到100,每個做的不一樣。但聰明的方法就是梯型面積 05/16 23:41
ji3g45j:現在任一個cpu來算,都很快就算完,有人堅持用for 05/16 23:43
ji3g45j:你能說他錯嗎? 05/16 23:43
注重system("pause")的跨平台性其實根本就不專業 只不過是拘泥小節 真正的跨平台程式 是用 #ifdef _WINDOWS #define SOMETHING #else #define SOMETHING_ELSE #endif 這種方式在寫的 而不是說什麼不跨平台就不用 那根本啥也不能用 ※ 編輯: AntaresStar 來自: 218.34.238.72 (05/17 00:32)
irh:system("pause");用不用看個人,跟跨平台一點關係都沒有, 05/17 02:07
irh:跨平台你還是得測試可不可以跑,所以只是個人喜好問題, 05/17 02:08
irh:有些東西即使compiler過,那個平台不支援也是得想其他方法 05/17 02:10
irh:最近對日本人的邏輯結構感到無言,難怪會出現一個這麼難懂 05/17 02:11
irh:甚至可以說難用的CellSDK... 05/17 02:13
CrBoy:以前在windows上寫程式的時候 我都用getch()來暫停,原因很 05/17 20:23
CrBoy:單純...因為他比較短 而且又不會出現我不想看到的字...XD 05/17 20:23
VictorTom:小弟在TC時代也是XD 不過getch()這個在conio.h裡的東西 05/17 21:10
VictorTom:似乎不是標準函式, 忘了之後其他家還有沒有, 只記得 05/17 21:11
VictorTom:clrscr()是真的沒有的樣子@_@"y 05/17 21:11
chrisQQ:2的話… 還有用了 screen 也不能卷回去看 T___T 05/18 06:25