c primer cin出錯講解

2021-08-30 15:31:17 字數 1599 閱讀 7439

cin.sync()的功能是清空緩衝區,而cin.ignore()雖然也是刪除緩衝區中資料的作用,但其對緩衝區中的刪除資料控制的較精確,cin.sync()並不是在所有的編譯器中都可以被使用

有時候你只想取緩衝區的一部分,而捨棄另一部分,這是就可以使用cin.ignore(),其使用方法是:

cin.ignore(int intexp, char chexp);

其中intexp 是乙個整型表示式,也可以是乙個整型數值,這個數值表示在一行中忽略的字元的最大數目,比如說intexp=100;還有乙個引數chexp,是乙個字元表示式。表示如果遇到乙個字元值等於chexp,那麼就停止ignore(),如果ignore100個字元之後還沒遇到值等於chexp的字元,那也得停止ignore(),所以100是ignore()所忽略的最大字元數。

下面是幾個例子

#include

#include

int main()

輸入12 34 23

25輸出 12 25

該ignore(100, 『\n』)為ignore(2, 『\n』)

輸入12 34 23

輸出12 4

這個是因為我們所用的io物件cin cout 都是操縱char資料的,不管我們輸入的是什麼資料,cin cout 都會轉成 char來處理,例如我們想要輸出的是乙個整形變數的值,那麼在輸出前,cout會將該變數的值轉成字元,在進行輸出。

如果cin.ignore()不給引數,則預設引數為cin.ignore(1,eof),即把eof前的1個字元清掉。

#include

#include

#include

int main()

while (ivec.size() == 0);

system(「pause」);

return 0;

}這個例子在輸入錯誤時候會陷入死迴圈

首先需要了解cin的用法。

輸入結束條件 :遇到enter、space、tab鍵

對結束符的處理 :當cin>>從緩衝區中讀取資料時,若緩衝區中第乙個字元是空格、tab或換行這些分隔符時,cin>>會將其忽略並清除,繼續讀取下乙個字元,若緩衝區為空,則繼續等待。但是如果讀取成功,字元後面的分隔符是殘留在緩衝區的,cin>>不做處理。

c++輸入緩衝機制規定當使用者鍵入輸入之後按下enter鍵,便會將所有剛剛使用者輸入的一次性全送到緩衝區,而cin便會從輸入緩衝區中讀取資料。回車標誌一次輸入的完成,如果資料不夠,則會等待使用者繼續輸入;如果資料有多餘,則將多餘的資料儲存在輸入流緩衝區中,供下次使用。

當緩衝區中有殘留資料時,cin會直接去讀取緩衝區的資料而不會請求鍵盤輸入。重要的是,回車符也會被存在輸入緩衝區中

cin讀取到檔案結束符(ctrl+z),cin的狀態被置位,不再接收輸入

用來更改cin的狀態標示符的,cin在接收到錯誤的輸入的時候,會設定狀態位good。如果goodbit位不為0,則cin不接受輸入。如果下次輸入前狀態位沒有改變那麼即使清除了緩衝區資料流也無法輸入。所以當輸入流發生錯誤後,要想再次進行輸入,必須新增std::cin.clear()。

輸入時鍵入的enter也會被儲存在緩衝區中。

enter有時候會被讀成連續的空格,有時候會被讀成結束符,這個由cin自己判斷決定。

php配置出錯,引發上傳檔案出錯

今天在做檔案上傳的時候,按正常邏輯提交,可提交到伺服器後,files tmp name 死活不對,表單的enctype multipart form data 這個也加上了,可值一直都是空。網上查了說要改php配置檔案的upload tmp dir,可是我其它系統能夠正常上傳,說明這個配置應該沒有問...

GTK 出錯解決

第一次寫gtk的程式,按書上 linux程式設計 第三版 抄了個最簡單的例子 p540 卻發現怎麼都編譯不過。一直提示找不到這個資料夾,上網發現很多人有這個問題。不過嘗試了網上提供的一些方法都不行。如 後來發現原來書上有個地方錯了 pkg config cflags libs gtk 2.0 是錯誤...

Tomcat啟動出錯????

在eclipse.開發環境下,使用spring webwork的框架下tomcat啟動出現以下錯誤 資訊 starting coyote http 1.1 on http 8080 2006 7 17 16 03 49 org.apache.jk.common.channelsocket init ...