[問題] 不要用system("pause");?

看板C_and_CPP作者 (5566反串好累)時間15年前 (2010/05/15 16:37), 編輯推噓21(22164)
留言87則, 19人參與, 最新討論串1/2 (看更多)
真的不要用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: 140.112.44.2

05/16 00:44, , 1F
如果你在Command Line模式, 需要system("pause")嗎?
05/16 00:44, 1F

05/16 00:51, , 2F
主要問題是not portable
05/16 00:51, 2F

05/16 00:53, , 3F
有差嗎..你都只要pause了..還在意浪費的資源嗎 @@"
05/16 00:53, 3F

05/16 00:53, , 4F
浪費資源那點根本沒差
05/16 00:53, 4F

05/16 01:16, , 5F
不過那速度真的挺慢的
05/16 01:16, 5F

05/16 01:17, , 6F
就像將一個shell parse後把執行程式的部份用system
05/16 01:17, 6F

05/16 01:17, , 7F
遠比執行執行shell還慢
05/16 01:17, 7F

05/16 01:24, , 8F
說真的, 乖乖開console去跑自己自己寫的console程式, 不
05/16 01:24, 8F

05/16 01:25, , 9F
過這常用在程式最後暫留視窗, 不過是在window的IDE下途
05/16 01:25, 9F

05/16 01:26, , 10F
個方便; 如果是程式中有其他地方要用press any key to
05/16 01:26, 10F

05/16 01:27, , 11F
continue的功能, 或許就用一般IO函數即可也是沒錯:)
05/16 01:27, 11F

05/16 01:27, , 12F
用system("PAUSE");每次都被小弟防火牆攔著問放不放行XD
05/16 01:27, 12F

05/16 07:52, , 13F
我當助教時就直接跟學生講…我不在windows測
05/16 07:52, 13F

05/16 07:52, , 14F
用了會有error…先扣分再說
05/16 07:52, 14F

05/16 09:57, , 15F
爛理由咧 如果你不能提供更好的它就不是爛理由
05/16 09:57, 15F

05/16 09:57, , 16F
本來就一點意義都沒有…去command-line下執行不就結了
05/16 09:57, 16F

05/16 10:01, , 17F
這就像要停車時每次都拉手煞車 弄得整車人東倒西歪一樣
05/16 10:01, 17F

05/16 10:45, , 18F
這是常識.真要程式中有若干步驟式暫停,一般要用等待按鍵函式
05/16 10:45, 18F

05/16 14:16, , 19F
當助教一下要那麼囂張嗎??
05/16 14:16, 19F

05/16 16:32, , 20F
ACM的規定本來就是這樣...
05/16 16:32, 20F

05/16 17:20, , 21F
ACM的規定跟學生有什麼關係.....
05/16 17:20, 21F

05/16 17:45, , 22F
寫程式多為使用者思考, 為了跑你的程式還要到console
05/16 17:45, 22F

05/16 17:45, , 23F
去看結果, 會不會太自私了點...
05/16 17:45, 23F

05/16 17:48, , 24F
最好是不用 system("PAUSE") 就要去 console 看 = =
05/16 17:48, 24F

05/16 17:49, , 25F
而且也沒人規定你寫的時候要怎樣啊, 大不了你寫完作業再
05/16 17:49, 25F

05/16 17:49, , 26F
把最後一行拿掉不行嗎?
05/16 17:49, 26F

05/16 17:52, , 27F
大家的火氣別這麼大 覺得用不用沒那麼嚴重啊....
05/16 17:52, 27F

05/16 17:56, , 28F
l大您似乎搞錯了一件事, 寫一個普通的console AP, 讓使
05/16 17:56, 28F

05/16 17:57, , 29F
用者先開console再執行本來就是自然而然的事, 一般練習
05/16 17:57, 29F

05/16 17:57, , 30F
寫入門程式加PAUSE, 不過是因為window環境下, 由IDE
05/16 17:57, 30F

05/16 17:58, , 31F
launch起來的console程式在執行結束後會自動close該
05/16 17:58, 31F

05/16 17:58, , 32F
console window, 所以我們用PAUSE或IO方式暫時停住那個
05/16 17:58, 32F

05/16 17:59, , 33F
視窗以便user/PG來看到執行結果, 扯到自私是完全搞錯方
05/16 17:59, 33F

05/16 17:59, , 34F
向了吧@_@"
05/16 17:59, 34F

05/16 18:01, , 35F
以現在的程式來說, 真正與user溝通的UI也多半window化了
05/16 18:01, 35F

05/16 18:03, , 36F
> <真是抱歉
05/16 18:03, 36F

05/16 18:07, , 37F
XD 大家討論交換意見而已啦 XD
05/16 18:07, 37F

05/16 18:07, , 38F
其實這些理由不無道理, 有些背後相關的牽連都是可以研究
05/16 18:07, 38F

05/16 18:09, , 39F
的. 不過寫程式總是有目的有結果, 在什麼環境有什麼可用
05/16 18:09, 39F

05/16 18:10, , 40F
的資源就做什麼事. 說到底IDE聰明一點在run launch AP時
05/16 18:10, 40F

05/16 18:12, , 41F
最後像bat一樣自動掛個類似PAUSE的功能就沒事啦XD
05/16 18:12, 41F

05/16 18:14, , 42F
嗯嗯
05/16 18:14, 42F

05/16 18:55, , 43F
code::blocks就會停 而且還附上執行時間哦>.^
05/16 18:55, 43F

05/16 19:05, , 44F
糟~`這樣小弟我也想把臨時測程式的工具從Dev換C::b了XD
05/16 19:05, 44F

05/16 19:13, , 45F
那位當助教的,我覺得如果你要做教育就要有明確的教育目標.
05/16 19:13, 45F

05/16 19:13, , 46F
而教育目標就是有所謂的重點,是老師跟學生提點過的. 至於,
05/16 19:13, 46F

05/16 19:14, , 47F
system()叫了哪個指令,那只是平台的知識而已,實在不必要私自
05/16 19:14, 47F

05/16 19:15, , 48F
加入到你的助教行程中要求學生.
05/16 19:15, 48F

05/16 19:16, , 49F
你有權力可以逼學生接受某規矩,不見得表示規矩符合教育意義.
05/16 19:16, 49F

05/16 19:22, , 50F
system("pause")在Linux下跑也不過就是一行sh錯誤
05/16 19:22, 50F

05/16 19:22, , 51F
又不會導致當掉 何必怕它...
05/16 19:22, 51F

05/16 21:41, , 52F
→ hilorrk:code::blocks就會停 而且還附上執行時間哦>.
05/16 21:41, 52F

05/16 22:31, , 53F
不知道C::B能不能直接對單一.c/cpp compile, 有時候簡單
05/16 22:31, 53F

05/16 22:32, , 54F
測東西或掛Debug看過程memory, 都要弄project就有點煩:(
05/16 22:32, 54F

05/16 22:32, , 55F
有空裝起來玩玩看好了:)
05/16 22:32, 55F

05/16 23:40, , 56F
可以的,請見VCR:http://ppt.cc/cxvo
05/16 23:40, 56F

05/16 23:53, , 57F
可以的, 只是不知道為什麼.c 還可以寫C++,設定有錯嗎?
05/16 23:53, 57F

05/17 00:23, , 58F
感謝j大, 您也太有心了, 老是麻煩您抓圖....^^||
05/17 00:23, 58F

05/17 00:24, , 59F
通常IDE會依.c或.cpp來找使用的compiler, 不過l大提到的
05/17 00:24, 59F

05/17 00:24, , 60F
狀況就挺有意思的了, 等有使用的強者回應吧XD
05/17 00:24, 60F

05/17 00:46, , 61F
其實這個圖老早就抓了 只是V大提了就擺上來 XDDD
05/17 00:46, 61F

05/17 00:58, , 62F
抱歉 Blueshine兄 你應該是位失格的助教吧
05/17 00:58, 62F

05/17 01:20, , 63F
l大提到的那個問題 我想不是IDE的問題...應該是compiler
05/17 01:20, 63F

05/17 01:21, , 64F
很神奇的是 g++允許下面這種程式碼:
05/17 01:21, 64F

05/17 01:21, , 65F
int n;
05/17 01:21, 65F

05/17 01:21, , 66F
cin >> n; // C++ style
05/17 01:21, 66F

05/17 01:21, , 67F
int a[n]; // C99 style
05/17 01:21, 67F

05/17 01:23, , 68F
至於詳細為何...我也不知道XD 有請高手解答
05/17 01:23, 68F

05/17 01:27, , 69F
印象中是編譯時有參數可以開關吧?? 板上好像討論過:)
05/17 01:27, 69F

05/17 01:38, , 70F
我只知道可以用-std開關C99和C++0x的東西...但是預設的
05/17 01:38, 70F

05/17 01:38, , 71F
C++98居然支持C99(我印象中兩者不相容?) 讓我頗疑惑XD
05/17 01:38, 71F

05/17 10:37, , 72F
印象中C++本身就支援這種宣告方式吧!?是C99向C++學的
05/17 10:37, 72F

05/17 11:07, , 73F
印象中之前的討論是, VLA是C標準後來才有的, C++沒有人
05/17 11:07, 73F

05/17 11:08, , 74F
提需要, 所以C++標準應該是沒有, compiler可能有extend
05/17 11:08, 74F

05/17 11:08, , 75F
這個feature就是了@_@"
05/17 11:08, 75F

05/17 12:16, , 76F
C++有vector和valarray這些東西 沒必要有VLA吧...XD
05/17 12:16, 76F

05/17 12:19, , 77F
方便啊, 對array初學者很friendly XD
05/17 12:19, 77F

05/17 12:19, , 78F
所以說C/C++的標準compiler很難遵守 除了C++本身語法太複
05/17 12:19, 78F

05/17 12:20, , 79F
不過說真的不曉得它怎麼實作的, 是不是仍使用stack,
05/17 12:20, 79F

05/17 12:20, , 80F
雜外 兩者的歧異也是原因之一嗎-____-||
05/17 12:20, 80F

05/17 12:20, , 81F
小弟這個原始人還是習慣需要自己malloc/new/vector,
05/17 12:20, 81F

05/17 12:20, , 82F
VLA就有點不敢用Orz
05/17 12:20, 82F

05/17 12:21, , 83F
啊, h大不好意思不小心斷到....XD
05/17 12:21, 83F

05/17 12:22, , 84F
習慣+1 此外很多compiler都不支援C99也是個原因
05/17 12:22, 84F

05/17 12:22, , 85F
尤其是在某些特定的環境(embedded system)~
05/17 12:22, 85F

05/17 14:05, , 86F
C++不支援VLA 樓上hi大那段code編得過 是因為編譯時沒加上
05/17 14:05, 86F

05/17 14:07, , 87F
-pedantic參數 建議man一下gcc查看pedantic的描述
05/17 14:07, 87F
文章代碼(AID): #1Bxitaq- (C_and_CPP)
文章代碼(AID): #1Bxitaq- (C_and_CPP)