作者That5566is78 (5566反串好累)
看板C_and_CPP
標題[問題] 不要用system("pause");
時間Sun May 16 00:37:53 2010
真的不要用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
推 flamo:如果你在Command Line模式, 需要system("pause")嗎? 05/16 00:44
推 zerodevil:主要問題是not portable 05/16 00:51
推 clanguage:有差嗎..你都只要pause了..還在意浪費的資源嗎 @@" 05/16 00:53
→ zerodevil:浪費資源那點根本沒差 05/16 00:53
→ sunneo:不過那速度真的挺慢的 05/16 01:16
→ sunneo:就像將一個shell parse後把執行程式的部份用system 05/16 01:17
→ sunneo:遠比執行執行shell還慢 05/16 01:17
推 VictorTom:說真的, 乖乖開console去跑自己自己寫的console程式, 不 05/16 01:24
→ VictorTom:過這常用在程式最後暫留視窗, 不過是在window的IDE下途 05/16 01:25
→ VictorTom:個方便; 如果是程式中有其他地方要用press any key to 05/16 01:26
→ VictorTom:continue的功能, 或許就用一般IO函數即可也是沒錯:) 05/16 01:27
→ VictorTom:用system("PAUSE");每次都被小弟防火牆攔著問放不放行XD 05/16 01:27
推 Blueshine:我當助教時就直接跟學生講…我不在windows測 05/16 07:52
→ Blueshine:用了會有error…先扣分再說 05/16 07:52
噓 MOONRAKER:爛理由咧 如果你不能提供更好的它就不是爛理由 05/16 09:57
→ MOONRAKER:本來就一點意義都沒有…去command-line下執行不就結了 05/16 09:57
→ MOONRAKER:這就像要停車時每次都拉手煞車 弄得整車人東倒西歪一樣 05/16 10:01
→ yauhh:這是常識.真要程式中有若干步驟式暫停,一般要用等待按鍵函式 05/16 10:45
→ final01:當助教一下要那麼囂張嗎?? 05/16 14:16
推 Blueshine:ACM的規定本來就是這樣... 05/16 16:32
推 loveflames:ACM的規定跟學生有什麼關係..... 05/16 17:20
→ loveme00835:寫程式多為使用者思考, 為了跑你的程式還要到console 05/16 17:45
→ loveme00835:去看結果, 會不會太自私了點... 05/16 17:45
→ uranusjr:最好是不用 system("PAUSE") 就要去 console 看 = = 05/16 17:48
→ uranusjr:而且也沒人規定你寫的時候要怎樣啊, 大不了你寫完作業再 05/16 17:49
→ uranusjr:把最後一行拿掉不行嗎? 05/16 17:49
→ james732:大家的火氣別這麼大 覺得用不用沒那麼嚴重啊.... 05/16 17:52
推 VictorTom:l大您似乎搞錯了一件事, 寫一個普通的console AP, 讓使 05/16 17:56
→ VictorTom:用者先開console再執行本來就是自然而然的事, 一般練習 05/16 17:57
→ VictorTom:寫入門程式加PAUSE, 不過是因為window環境下, 由IDE 05/16 17:57
→ VictorTom:launch起來的console程式在執行結束後會自動close該 05/16 17:58
→ VictorTom:console window, 所以我們用PAUSE或IO方式暫時停住那個 05/16 17:58
→ VictorTom:視窗以便user/PG來看到執行結果, 扯到自私是完全搞錯方 05/16 17:59
→ VictorTom:向了吧@_@" 05/16 17:59
→ VictorTom:以現在的程式來說, 真正與user溝通的UI也多半window化了 05/16 18:01
→ loveme00835:> <真是抱歉 05/16 18:03
推 VictorTom:XD 大家討論交換意見而已啦 XD 05/16 18:07
→ VictorTom:其實這些理由不無道理, 有些背後相關的牽連都是可以研究 05/16 18:07
→ VictorTom:的. 不過寫程式總是有目的有結果, 在什麼環境有什麼可用 05/16 18:09
→ VictorTom:的資源就做什麼事. 說到底IDE聰明一點在run launch AP時 05/16 18:10
→ VictorTom:最後像bat一樣自動掛個類似PAUSE的功能就沒事啦XD 05/16 18:12
推 loveme00835:嗯嗯 05/16 18:14
→ hilorrk:code::blocks就會停 而且還附上執行時間哦>.^ 05/16 18:55
推 VictorTom:糟~`這樣小弟我也想把臨時測程式的工具從Dev換C::b了XD 05/16 19:05
→ yauhh:那位當助教的,我覺得如果你要做教育就要有明確的教育目標. 05/16 19:13
→ yauhh:而教育目標就是有所謂的重點,是老師跟學生提點過的. 至於, 05/16 19:13
→ yauhh:system()叫了哪個指令,那只是平台的知識而已,實在不必要私自 05/16 19:14
→ yauhh:加入到你的助教行程中要求學生. 05/16 19:15
→ yauhh:你有權力可以逼學生接受某規矩,不見得表示規矩符合教育意義. 05/16 19:16
推 AntaresStar:system("pause")在Linux下跑也不過就是一行sh錯誤 05/16 19:22
→ AntaresStar:又不會導致當掉 何必怕它... 05/16 19:22
推 herman602:→ hilorrk:code::blocks就會停 而且還附上執行時間哦>. 05/16 21:41
推 VictorTom:不知道C::B能不能直接對單一.c/cpp compile, 有時候簡單 05/16 22:31
→ VictorTom:測東西或掛Debug看過程memory, 都要弄project就有點煩:( 05/16 22:32
→ VictorTom:有空裝起來玩玩看好了:) 05/16 22:32
→ loveme00835:可以的, 只是不知道為什麼.c 還可以寫C++,設定有錯嗎? 05/16 23:53
推 VictorTom:感謝j大, 您也太有心了, 老是麻煩您抓圖....^^|| 05/17 00:23
→ VictorTom:通常IDE會依.c或.cpp來找使用的compiler, 不過l大提到的 05/17 00:24
→ VictorTom:狀況就挺有意思的了, 等有使用的強者回應吧XD 05/17 00:24
→ james732:其實這個圖老早就抓了 只是V大提了就擺上來 XDDD 05/17 00:46
推 kikiqqp:抱歉 Blueshine兄 你應該是位失格的助教吧 05/17 00:58
推 hilorrk:l大提到的那個問題 我想不是IDE的問題...應該是compiler 05/17 01:20
→ hilorrk:很神奇的是 g++允許下面這種程式碼: 05/17 01:21
→ hilorrk:int n; 05/17 01:21
→ hilorrk:cin >> n; // C++ style 05/17 01:21
→ hilorrk:int a[n]; // C99 style 05/17 01:21
→ hilorrk:至於詳細為何...我也不知道XD 有請高手解答 05/17 01:23
→ VictorTom:印象中是編譯時有參數可以開關吧?? 板上好像討論過:) 05/17 01:27
推 hilorrk:我只知道可以用-std開關C99和C++0x的東西...但是預設的 05/17 01:38
→ hilorrk:C++98居然支持C99(我印象中兩者不相容?) 讓我頗疑惑XD 05/17 01:38
→ wudidog:印象中C++本身就支援這種宣告方式吧!?是C99向C++學的 05/17 10:37
推 VictorTom:印象中之前的討論是, VLA是C標準後來才有的, C++沒有人 05/17 11:07
→ VictorTom:提需要, 所以C++標準應該是沒有, compiler可能有extend 05/17 11:08
→ VictorTom:這個feature就是了@_@" 05/17 11:08
推 hilorrk:C++有vector和valarray這些東西 沒必要有VLA吧...XD 05/17 12:16
推 VictorTom:方便啊, 對array初學者很friendly XD 05/17 12:19
→ hilorrk:所以說C/C++的標準compiler很難遵守 除了C++本身語法太複 05/17 12:19
→ VictorTom:不過說真的不曉得它怎麼實作的, 是不是仍使用stack, 05/17 12:20
→ hilorrk:雜外 兩者的歧異也是原因之一嗎-____-|| 05/17 12:20
→ VictorTom:小弟這個原始人還是習慣需要自己malloc/new/vector, 05/17 12:20
→ VictorTom:VLA就有點不敢用Orz 05/17 12:20
→ VictorTom:啊, h大不好意思不小心斷到....XD 05/17 12:21
→ hilorrk:習慣+1 此外很多compiler都不支援C99也是個原因 05/17 12:22
→ hilorrk:尤其是在某些特定的環境(embedded system)~ 05/17 12:22
推 lausai:C++不支援VLA 樓上hi大那段code編得過 是因為編譯時沒加上 05/17 14:05
→ lausai:-pedantic參數 建議man一下gcc查看pedantic的描述 05/17 14:07