Socket網路程式設計 cin輸入流的相關

2021-09-26 00:20:06 字數 1272 閱讀 5225

一、cin.clear()、cin.sync()

cin.clear()是用來更改cin的狀態標示符的。

cin.sync()是用來清除快取區的資料流的。

如果標示符沒有改變那麼即使清除了資料流也無法輸入。所以兩個要聯合起來使用。例如:

#includeusing namespace std;

int main()

{ int a;

cout<<"輸入乙個字母:"<>a;  //int型變數中放了char型資料,failbit置1

cout<<"cin.fail()="<>a;                         //故此處的輸入無效

cout<>a又把那個字元放入a中,流輸入流又不能正常工作

cin>>a;

cout<>a;

cout<<"a="<二、cin.ignore(a,ch)

從輸入流(cin)中提取字元,提取的字元被忽略(ignore),不被使用。每拋棄乙個字元,它都要計數和比較字元:如果計數值達到a或者被拋棄的字元是ch,則cin.ignore()函式執行終止;否則,它繼續等待。

比如可以這麼用:

cin.ignore(1024,'\n'),通常把第乙個引數設定得足夠大,這樣實際上總是只有第二個引數'\n'起作用,所以這一句就是把回車(包括回車)之前的所以字元從輸入緩衝(流)中清除出去。

三、cin.sync()和cin.ignore()的比較

sync()的作用就是清除輸入緩衝區。成功時返回0,失敗時badbit會置位,函式返回-1.

另外,對於繫結了輸出的輸入流,呼叫sync(),還會重新整理輸出緩衝區。

但由於程式執行時並不總是知道外部輸入的進度,很難控制是不是全部清除輸入緩衝區的內容。通常我們有可能只是希望放棄輸入緩衝區中的一部分,而不是全部。比如清除掉當前行、或者清除掉行尾的換行符等等。但要是緩衝區中已經有了下一行的內容,這部分可能是我們想保留的。這個時候最好不要用sync()。可以考慮用ignore函式代替。

cin.ignore(numeric_limits::max(),'/n');//清除當前行

cin.ignore(numeric_limits::max());     //清除cin裡所有內容

不要被長長的名字嚇倒,numeric_limits::max()不過是climits標頭檔案定義的流使用的最大值,你也可以用乙個足夠大的整數代替它。

使用ignore顯然能比sync()更精確控制緩衝區。

cin輸入空格

cin是c 程式語言互換流中的標準輸入流,是istream類的物件,是計算機輸入的一種手段,它需要iostream.h支援。cin從標準輸入裝置 鍵盤 獲取資料,程式中的變數通過流提取符 從流中提取資料。流提取符 從流中提取資料時跳過輸入流中的空格 tab鍵 換行符等空白字元。注意 只有在輸入完資料...

網路程式設計 Socket程式設計

一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...

socket網路程式設計

首先認識乙個表示主機資訊的結構體 struct hostent h addrtype 這是表示主機所使用的位址型別的定義,在c語言winsock2.h標頭檔案中以 af 開頭的巨集定義就是它的值。如果使用的是ipv4,則值為 af inet 如果是ipv6,值為 af inet4 h length ...