国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - GetChar緩存機制深入剖析

GetChar緩存機制深入剖析

2020-12-26 16:05C語言教程網(wǎng) C/C++

以下是對GetChar緩存機制進行了詳細的介紹,需要的朋友可以過來參考下

與緩存區(qū)相關(guān)最常見的操作就是字符的輸入與輸出操作getchar,getc,getch,getche,gets系列函數(shù)。

第一個例子(與getchar有關(guān)):

復(fù)制代碼 代碼如下:

#include<stdio.h> 
int main() 

    int ch; 
    ch=getchar(); 
    ch=getchar(); 
    printf("%d\n",ch); 
    return 0; 


代碼如上,當輸入一個字符按下回車后程序沒有等待你二次輸入就結(jié)束了,而且無論輸入什么運行結(jié)果均是10,是不是很奇怪(反正我第一次遇到時感覺是很奇怪),更奇怪的是當你一次性輸入多個字符如abcd結(jié)果又正確的打印出了98,為什么呢?這就是緩沖區(qū)的原因。

 

解釋如下:getchar定義在stdio.h文件中,我們在stdio.h中可以找到其相關(guān)的定義:

復(fù)制代碼 代碼如下:

#define getchar()         getc(stdin)//即getchar等同于調(diào)用getc(stdin)


我們又找到getc的定義

復(fù)制代碼 代碼如下:

#define getc(_stream)     (--(_stream)->_cnt >= 0 \ 
                ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream)) 


將其展開即得:

復(fù)制代碼 代碼如下:

if(--(stdin)->_cnt>=0) 
      return 0xff&*(stdin)->ptr++; 

 

復(fù)制代碼 代碼如下:

else 
        return filbuf(stdin); 


代碼譯如下stdin是標準輸入流,查看MSDN與stdio.h中可以看到定義如下:

 

Stdio.h中:

復(fù)制代碼 代碼如下:

#define stdin  (&_iob[0]) 


跟蹤即可得:

復(fù)制代碼 代碼如下:

_CRTIMP extern FILE _iob[]; 


從上面代碼可得_iob是FILE結(jié)構(gòu)類型的,查看stdio.h中可以看到FILE結(jié)構(gòu)體定義如下:

復(fù)制代碼 代碼如下:


struct _iobuf { 
        char *_ptr; 
        int   _cnt; 
        char *_base; 
        int   _flag; 
        int   _file; 
        int   _charbuf; 
        int   _bufsiz; 
        char *_tmpfname; 
        }; 

 

 


從FILE結(jié)構(gòu)中我們可以得到了上面getc宏定義中使用的_cnt,_ptr成員,但這些都是次要的,我們應(yīng)該不難發(fā)現(xiàn)有這樣幾個成員_bufsize,_base分別對應(yīng)的是緩沖區(qū)大小,緩沖區(qū)基地址,從這里得到一個顯而意見的結(jié)論就是getchar函數(shù)使用了緩沖機制。(_cnt對應(yīng)的是緩沖區(qū)的輸入的字節(jié)數(shù)目,_ptr對應(yīng)的是讀指針的位置)

 

getc宏定義詳解

復(fù)制代碼 代碼如下:

--(stdin)->_cnt>=0 


此句判斷是否緩沖區(qū)內(nèi)有數(shù)據(jù),有的話就減一(表示又讀了一個),并讀取數(shù)據(jù)return 0xff&*(stdin)->ptr++,讀完成后,將讀指針向前移一個位置【重要】

 

好了,講了這么多都是鋪墊,現(xiàn)在回到正題為什么會出現(xiàn)上述結(jié)果:)

出現(xiàn)上述結(jié)果追根結(jié)底還是由于getchar函數(shù)使用了緩沖(看了上面的,我想大家也知道了,確實使用了緩沖),當輸入一個字符按下回車后程序沒有等待你二次輸入就結(jié)束了,而且無論輸入什么運行結(jié)果均是10,這是因為當用戶輸入了一個字符后,并按下回車后,緩沖中會存入用戶輸入的字符以及換行鍵的ASCII碼(10 ~)【略去的回車的ASCII碼13,可能是為了跨平臺,在Linux下,回車后就是換行10,Windows下回車是先回車回到首行,再換行,即13 10】(執(zhí)行第一次getchar實際上是執(zhí)行g(shù)etc的else語句,填充緩存區(qū)后_cnt=2,_prt指向0位置,執(zhí)行完后_cnt=1,_prt指向1位置),第二次執(zhí)行g(shù)etchar時,調(diào)用getc不會再執(zhí)行else語句,執(zhí)行的是if語句,故第二次不再等待用戶輸入了,直接執(zhí)行,執(zhí)行后cnt=0,prt指向位置2,并返回ptr指向位置1時的結(jié)果,即10,由于10為換行鍵,當執(zhí)行遇到此時,會在執(zhí)行完后清空緩存,ptr重新指向了位置0,cnt=0。

當輸入abc的時候分析一樣,只不過掃行了第二個getchar后,cnt=2,ptr指向了位置2。

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現(xiàn)電腦關(guān)機程序

    C語言實現(xiàn)電腦關(guān)機程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電腦關(guān)機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 性色国产 | 国产亚洲精品美女久久久久久久久久 | 免费裸体无遮挡黄网站免费看 | 视频一区二区中文字幕 | 国产免费久久 | 黄色免费看 | 精品91久久 | 国产精品18久久久久久久久久久久 | 欧美高清视频在线观看 | 免费午夜电影 | 免费a级毛片在线观看 | 久久精品 | 国产小视频在线 | 中文久久 | 久久免费精品视频 | 国产精品爱久久久久久久 | 午夜黄色 | 激情五月激情综合网 | 无码日韩精品一区二区免费 | 美日韩一区二区 | jizz欧美大片 | 欧美日韩在线电影 | av免费网| 国产成人精品久久二区二区 | 精品国产黄a∨片高清在线 欧美一级免费 | 日韩av电影在线观看 | 亚洲午夜精品视频 | 2023国产精品久久久精品双 | 午夜操操操 | 成人羞羞视频在线看网址 | 成年无码av片在线 | 91成人免费在线观看 | 日本福利网站 | 国产一区二区免费视频 | 日韩欧美在线一区 | 久久久久久亚洲 | 一级一片在线观看 | 国产精品一区视频 | 免费成人黄色 | 国产精品香蕉在线观看 | 精品一区二区av |