目錄
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的辛集網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!sleep(n)函數(shù)
輸出緩沖區(qū)
fflush(stdout)
回車(chē)和換行表示的含義是完全不同的
\r 回車(chē)
\r 的注意事項(xiàng)
\n 換行
進(jìn)度條打印代碼
在頭文件
如上圖中,兩個(gè)main函數(shù)的區(qū)別只有printf()函數(shù)中有無(wú)\n換行符。但運(yùn)行結(jié)果卻截然不同。帶\n的程序?qū)⒘⒖檀蛴ello Linux,然后休眠3秒后結(jié)束程序,而不帶\n的程序?qū)⑿菝?秒,然后程序結(jié)束后才能打印hello Linux。為什么會(huì)這樣呢?
答案是:因?yàn)橛休敵鼍彌_區(qū)的存在,而輸出緩沖區(qū)又有特定的刷新策略將數(shù)據(jù)刷新到顯示器上。
輸出緩沖區(qū)由于我們知道,程序一定是從上到下執(zhí)行的,所以不帶\n的情況,printf函數(shù)也一定是先執(zhí)行的,只是沒(méi)有立刻將打印結(jié)果顯示到屏幕上,而是休眠了3秒,等程序結(jié)束后才顯示。這里就要引出一個(gè)知識(shí)點(diǎn)叫輸出緩沖區(qū)。C語(yǔ)言是會(huì)為我們提供輸出緩沖區(qū)的,什么意思呢?上圖代碼是用C語(yǔ)言編寫(xiě)的,因?yàn)檎Z(yǔ)言本質(zhì)上就是用來(lái)操作計(jì)算機(jī)硬件的,所以這里C語(yǔ)言可以用來(lái)操作內(nèi)存,輸出緩沖區(qū)就是這塊內(nèi)存的名字,這塊輸出緩沖區(qū)會(huì)根據(jù)特定的刷新策略,進(jìn)行刷新。比如說(shuō):內(nèi)存對(duì)于顯示器設(shè)備采用的策略一般是行刷新,只有遇到\n換行符才會(huì)把\n之前的數(shù)據(jù)全部刷新到顯示器設(shè)備上,注意遇到空格是不會(huì)的。(這里的輸出緩沖區(qū)也可以認(rèn)為他是行緩沖區(qū))
fflush(stdout)本質(zhì)上和\n的區(qū)別就只是不用換行,都是將輸出緩沖區(qū)的內(nèi)容刷新到標(biāo)準(zhǔn)輸出上,即顯示器。
如果printf函數(shù)不帶\n換行符,還想立刻刷新到顯示器上,在printf函數(shù)后添加 fflush(stdout)即可。如下圖:
回車(chē)和換行表示的含義是完全不同的\r 回車(chē)1. \r 回車(chē)并不會(huì)換行,回車(chē)表示回到當(dāng)前行的行首,如上圖?;剀?chē)用\r表示。注意在printf這樣的輸出函數(shù)中用\r回車(chē)符,并且是連續(xù)輸出,后來(lái)輸出的內(nèi)容會(huì)將之前的內(nèi)容原地覆蓋掉,這也解釋了一些動(dòng)態(tài)效果是如何實(shí)現(xiàn)的,如倒計(jì)時(shí),或者旋轉(zhuǎn),這里用旋轉(zhuǎn)舉例。假設(shè)最初是 | ,后來(lái)輸出 \ 并將 | 覆蓋,后來(lái)又輸出 / 將 \ 覆蓋掉。
\r 的注意事項(xiàng)\r 已經(jīng)中招兩次了,比如上兩張圖倒計(jì)時(shí)的視覺(jué)效果,比如從5倒計(jì)時(shí)到1,最后屏幕上應(yīng)該留有“正在倒計(jì)時(shí)1”這樣的文本,但程序運(yùn)行結(jié)束后卻發(fā)現(xiàn)沒(méi)有,文本好像消失了,是真的消失了嗎?其實(shí)沒(méi)有消失,只是因?yàn)?\r不會(huì)換行,導(dǎo)致讓用戶輸入指令的提示符部分即上兩張圖紅框部分擋住了?“正在倒計(jì)時(shí)1”這個(gè)文本。兩次中招,花費(fèi)大量時(shí)間去腦部 /r的作用,真是快氣死了。
\n 換行2. \n 換行并不會(huì)回到行首,而只表示換行而已,如上圖。換行用\n表示。那肯定有人會(huì)疑惑了,我們平時(shí)寫(xiě)代碼用pritnf函數(shù)時(shí),加了\n后打印出來(lái)的結(jié)果為什么會(huì)回到行首再換行呢?這是因?yàn)椴煌僮飨到y(tǒng)的編碼規(guī)則不一樣,Windows系統(tǒng)下的大多數(shù)編譯器會(huì)把?\n 編譯成?\n\r 。所以不同操作系統(tǒng)的代碼相互拷貝,有時(shí)會(huì)造成換行失敗。
進(jìn)度條打印代碼如下圖:
1. char*c1是用來(lái)制造旋轉(zhuǎn)的視覺(jué)效果的,有些場(chǎng)景會(huì)需要這種效果,如下載文件時(shí),文件過(guò)大,導(dǎo)致進(jìn)度緩慢,進(jìn)度一直在比如66%,如果不存在旋轉(zhuǎn)或者其他視覺(jué)效果時(shí),可能會(huì)讓用戶認(rèn)為卡機(jī)了,所以需要制造一個(gè)無(wú)論何時(shí)都會(huì)發(fā)生視覺(jué)變化的效果,如下面的旋轉(zhuǎn)。c1中有 \\ ,也是為了轉(zhuǎn)義。
2. 在Linux中sleep是以秒為單位,太慢了,所以下面使用了usleep,以微秒為單位,1000微秒等于1毫秒,10000微妙等于10毫秒,等于0.01秒。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧