(八十八)對非char型別在cin時輸入字元

2021-07-08 21:53:44 字數 1599 閱讀 7060

**:

#includeconst int max = 5;

int main()

說明:

①fish是double型別陣列。

當cin>>fish[i]時,即給double型別陣列中乙個成員賦值時,假如輸入的是數字,則賦值成功;假如輸入的是字母,則該表示式返回false。

於是在while的判斷語句裡,返回false,於是跳過迴圈部分,執行下一段語句。

這說明:讀取失敗的表示式,返回值是false

②當cin>>fish[i]失敗後,fish[i]並沒有被賦值。

在後面,char m;其後的兩行**,都沒有被執行。

原因在於,當cin應該讀取乙個int型別失敗之後,其返回乙個false值,並且被標記乙個錯誤標記(不清楚其作用原理,但實際測試是之後所有cin將不被執行)

這說明:讀取失敗,之後的cin都無法執行。

③假如在cin>>m;之前,加入一行**cin.clear();

那麼在執行**的時候,假如先輸入a,那麼cin>>m;直接讀取了'a'這個字元,於是在cout《這說明:讀取失敗的字元,被留在了輸入快取區之中。

④假如先輸入乙個正確的double型別數字,再輸入乙個不符合要求的字元,返回的結果是並沒有影響陣列fish。

這說明:輸入不符合要求的字元,不影響變數的值。

特別注意:

&& 的執行邏輯為:先判斷左邊,假如為真,再執行右邊。假如返回值為false,那麼直接跳過右邊不再執行。

例如while (i < max&&cin >> fish[i])這句,因為當i為5時,i假如不是這樣的話,那麼雖然i不小於max,但是依然要執行判斷cni>>fish[i],那麼結果就是要再次輸入,然後根據輸入判斷輸入返回值是true還是false。

清空輸入快取區:

假如我們需要程式在讀取到不符合要求的字元時,做出提示,並清除輸入快取區,可以這麼做:

**:

#includeint main()

cout << "你輸入的數字為:" << a << endl;

system("pause");

return 0;

}

輸出:

輸入乙個數字:f

請輸入數字,不要輸入不符合要求的內容

請在這裡重新輸入:ffff

請輸入數字,不要輸入不符合要求的內容

請在這裡重新輸入:3

你輸入的數字為:3

請按任意鍵繼續. . .

說明:

①在這裡,使用了2行**,第一行**cin.clear()用來清除錯誤標記,但是由於之前輸入的字母依然在快取區之內,將被cin>>a再次讀取,於是會陷入無限的死迴圈中。

②在while語句裡,使用!cin,假如cin無法輸入,則返回的是false,而!cin返回的則是true(因為!是true和false轉換),於是執行迴圈

於是,假如無法輸入,則執行while裡面的迴圈語句——提示 + 清除錯誤標誌 + 清除輸入快取(防止cin再次讀入) + 再次輸入。

愛情八十八課,對抗消磨

消磨,就是兩個人的愛情,只剩下一起打哈欠。雖然蕭伯納說 正因為需要個人一起打哈欠,所以才選擇愛情。但卻很少有人能抵達老蕭同志的境界,大部分人在 相看兩相厭 的時刻,就會提出分手。真的,所有愛情都會發展到 消磨 階段,當這個質變來臨時,只有兩條路 要麼結婚 要麼分手。決無其他。不認為 一起打哈欠 是長...

(八十八)VFL語言初步 實現布局

基本的語法 vfl的語法為h 和v 開頭。代表水平和垂直。接下來假設要涉及距離。使用 x x為距離的點數。對於檢視。用 包圍,比如 blueview 以下的語句實現了blueview水平方向左右各距離控制器的邊緣20點 h 20 blueview 20 假設要指定寬高,在檢視名稱之後用圓括號內填入常...

第八十八周學習生活總結

今天是2021年1月16日,上週一回家,這算是在家的第一周了。春招告急 漸行漸遠 去年疫情來學校之前,我們家後面有個和我一般大的男生結婚了,前幾天聽我夥計說還有十幾天我們就要去他們家喝滿月酒了。想想我自己,我連學還沒上完,現在還坐在屋子裡碼字,和我同一年出生的同學就已經在哄孩子了,果真人生都是在漸行...