c 中cin的工作過程

2021-06-21 10:18:27 字數 1087 閱讀 5897

初學c++,之前一直不知道cin的工作流程是什麼,今天研究了一下,有一點小小的收穫,特此分享

以這段**為例

#include #include #include using namespace std;

/*題目:

翻轉句子中單詞的順序。

輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。

例如: 句子中單詞以空格符隔開。標點符號視為乙個字元。

輸入「i am a student.」,則輸出「student. a am i」。*/

int main()

//如果沒輸入東西,匯報異常後退出

if(v.size() == 0)

//迴圈倒序輸出單詞

for(vector::size_type ix = v.size() - 1; ix >= 0; --ix)

cout << endl;

return 0;

}

在讀入文字階段,我們的操作是:輸入i am a student. 回車後輸入ctrl + z再回車。 第一次按下enter後,整句話放入輸入緩衝區(不含

ctrl + z),同時由於按下第乙個enter,cin開始檢測輸入緩衝區中字元,將第乙個空格前的"i"取出放入str中,執行迴圈體,結束後再將第二個空格前的"am"取出,做同樣處理……直到句子處理結束。此時輸入緩衝區已經無資料。這時遇到第二個enter,檢測到緩衝區空,且有

ctrl + z(他並不在緩衝區中)於是跳出迴圈,執行下面的語句。

有幾點需要注意:

1.空格,tab和enter可作為字元之間的分隔符

2.只有enter可以重新整理緩衝區,即讓輸入的字元開始放入緩衝區並處理;按下enter之前,輸入的字元都不進行處理,而不是每輸入一串字元,或碰到分隔符就處理。

3.ctrl + z不會產生字元,也不進入緩衝區,它通常的作用是在while(cin >> str)這種形式中結束迴圈

4.ctrl + z只有在緩衝區為空時才會起作用,這就是為什麼要按兩次enter。第一次enter將緩衝區中的資料都處理完並清空,第二次enter觸發cin檢測到ctrl+ z,此時緩衝區空,所以跳出迴圈

Linux中Shell工作過程

1 讀取使用者由鍵盤輸入的命令列。2 分析命令,以命令名作為檔名,並將其它引數改造為系統呼叫execve 內部處理所要求的形式。3 終端程序呼叫fork 建立乙個子程序。4 終端程序本身用系統呼叫wait4 來等待子程序完成 如果是後台命令,則不等待 當子程序執行時呼叫execve 子程序根據檔名 ...

DHCP工作過程

dhcp服務的工作過程 如果在區域網中部署了dhcp伺服器,並且客戶端設定為自動獲得ip位址。這樣當dhcp客戶端第一次登入網路的時候,也就是客戶端發現本機上沒有任何ip資料設定,它會向網路發出乙個dhcp discover封包。因為客戶端還不知道自己屬於哪乙個網路,所以封包的 位址會為 0.0.0...

FTP 工作過程

1 ftp伺服器執行ftpd守護程序,等待使用者的ftp請求。2 使用者執行ftp命令,請求ftp伺服器為其服務。例 ftp 202.119.2.197 3 ftpd守護程序收到使用者的ftp請求後,派生出子程序ftp與使用者程序ftp互動,建立檔案傳輸控制連線,使用tcp埠21。4 使用者輸入ft...