日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當(dāng)前位置: 首頁 >

详解getchar()函数与缓冲区

發(fā)布時(shí)間:2023/11/30 38 豆豆
默认站点 收集整理的這篇文章主要介紹了 详解getchar()函数与缓冲区 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、首先,我們看一下這段代碼:

?

它的簡(jiǎn)單意思就是從鍵盤讀入一個(gè)字符,然后輸出到屏幕。理所當(dāng)然,我們輸入1,輸出就是1,輸入2,輸出就是2。

那么我們?nèi)绻敵龅氖?2呢?

?

它的輸出是1。

這里我們先簡(jiǎn)單的解釋下,因?yàn)楫?dāng)我們從鍵盤輸入字符‘1’,‘2’,并按下回車后,我們的輸入被放入了輸入緩沖區(qū),這個(gè)時(shí)候getchar()會(huì)從緩沖區(qū)中讀取我們剛才的輸入,一次只讀一個(gè)字符,所以字符1就被拿出來了,賦值給了c,然后putchar()又將c放在了標(biāo)準(zhǔn)輸出,也就是這里的屏幕,所以我們看見了最終的顯示結(jié)果1。同時(shí)字符‘1’也被緩沖區(qū)釋放了,而字符‘2’仍然被留在了緩沖區(qū)。而這樣是很不安全的,有可能下次使用的時(shí)候,我們的緩沖區(qū)會(huì)讀到一些垃圾,但是當(dāng)程序結(jié)束的時(shí)候,它會(huì)自動(dòng)刷新。

2、我們接著看下面的代碼:

?

大家覺得這幾行代碼是什么意思呢?大家是否真的看懂了呢?

如果你覺得你看懂了,那么我提一個(gè)問題,你覺得是不是你從鍵盤輸入一個(gè)字符就會(huì)輸出一個(gè)字符,直到遇見了換行符呢?

emmmmm。

如果你真的這么想了,那你就錯(cuò)了。

它真正的運(yùn)行過程應(yīng)該是這樣的:還記得我們剛才說過的東西嗎,getchar()會(huì)從輸入緩沖區(qū)去讀取內(nèi)容,也就是說我們把所有的內(nèi)容都輸入完成并且按下了Enter鍵后,我們的輸入才被送進(jìn)去了輸入緩沖區(qū),這個(gè)時(shí)候,while循環(huán)才開始工作,每一次getchar()從輸入緩沖區(qū)讀取一個(gè)字符,然后如果不是換行符就輸出。

3、那么我們?yōu)槭裁匆褂镁彌_區(qū)呢?

舉個(gè)例子,我們知道計(jì)算機(jī)CPU的處理速度很快的,而我們鍵盤的輸入速度總是比不過CPU的處理速度,那么CPU就得一直等著鍵盤輸入完,這樣很浪費(fèi)資源。于是,我們黨鍵盤輸入完了,再讓CPU一次性處理,這樣就會(huì)大大地提高效率。

又比如,我們的打印機(jī)打印文檔,打印機(jī)的處理速度是很慢的,所以我們會(huì)將文檔輸出到打印機(jī)的緩存中去,這樣打印機(jī)就可以自行慢慢打印,而不必占用CPU資源。

4、緩沖區(qū)的類型

  緩沖區(qū) 分為三種類型:全緩沖、行緩沖和不帶緩沖。

  1、全緩沖

  在這種情況下,當(dāng)填滿標(biāo)準(zhǔn)I/O緩存后才進(jìn)行實(shí)際I/O操作。全緩沖的典型代表是對(duì)磁盤文件的讀寫。

  2、行緩沖

  在這種情況下,當(dāng)在輸入和輸出中遇到換行符時(shí),執(zhí)行真正的I/O操作。這時(shí),我們輸入的字符先存放在緩沖區(qū),等按下回車鍵換行時(shí)才進(jìn)行實(shí)際的I/O操作。典型代表是鍵盤輸入數(shù)據(jù)。

  3、不帶緩沖

  也就是不進(jìn)行緩沖,標(biāo)準(zhǔn)出錯(cuò)情況stderr是典型代表,這使得出錯(cuò)信息可以直接盡快地顯示出來。

5、緩沖區(qū)的刷新

緩沖區(qū)會(huì)在以下三種情況下被刷新:

1、緩沖區(qū)滿

2、執(zhí)行flush刷新緩沖區(qū)的語句

3、程序正常結(jié)束。
---------------------
作者:lws123253
來源:CSDN
原文:https://blog.csdn.net/lws123253/article/details/79848373
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

轉(zhuǎn)載于:https://www.cnblogs.com/jack-hzm/p/10059231.html

總結(jié)

以上是默认站点為你收集整理的详解getchar()函数与缓冲区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網(wǎng)站內(nèi)容還不錯(cuò),歡迎將默认站点推薦給好友。