最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++ cin 作為while條件(詳解)

 更新時間:2017年05月02日 10:43:56   投稿:jingxian  
下面小編就為大家?guī)硪黄猚++ cin 作為while條件(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文一切測試在windows clion中進(jìn)行

在clion中,ctrl +z并不是文件結(jié)束符

在cmd中運(yùn)行,只需要ctrl+z再加回車就可以得到正確結(jié)果

1、cin

cin是C++編程語言中的標(biāo)準(zhǔn)輸入流對象,即istream類的對象。cin主要用于從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),這里的標(biāo)準(zhǔn)輸入,指的是終端的鍵盤。此外,cout是流的對象,即ostream類的對象,cerr是標(biāo)準(zhǔn)錯誤輸出流的對象,也是ostream 類的對象。這里的標(biāo)準(zhǔn)輸出指的是終端鍵盤,標(biāo)準(zhǔn)錯誤輸出指的是終端的屏幕。

在理解cin功能時,不得不提標(biāo)準(zhǔn)輸入緩沖區(qū)。當(dāng)我們從鍵盤輸入字符串的時候需要敲一下回車鍵才能夠?qū)⑦@個字符串送入到緩沖區(qū)中,那么敲入的這個回車鍵(\r)會被轉(zhuǎn)換為一個換行符\n,這個換行符\n也會被存儲在cin的緩沖區(qū)中并且被當(dāng)成一個字符來計算!比如我們在鍵盤上敲下了123456這個字符串,然后敲一下回車鍵(\r)將這個字符串送入了緩沖區(qū)中,那么此時緩沖區(qū)中的字節(jié)個數(shù)是7 ,而不是6。

cin讀取數(shù)據(jù)也是從緩沖區(qū)中獲取數(shù)據(jù),緩沖區(qū)為空時,cin的成員函數(shù)會阻塞等待數(shù)據(jù)的到來,一旦緩沖區(qū)中有數(shù)據(jù),就觸發(fā)cin的成員函數(shù)去讀取數(shù)據(jù)。當(dāng)cin>>從緩沖區(qū)中讀取數(shù)據(jù)時,若緩沖區(qū)中第一個字符是空格、tab或換行這些分隔符時,cin>>會將其忽略并清除,繼續(xù)讀取下一個字符,若緩沖區(qū)為空,則繼續(xù)等待。但是如果讀取成功,字符后面的分隔符是殘留在緩沖區(qū)的,cin>>不做處理。

使用一個istream的對象作為條件時,效果是檢查流的狀態(tài)。若流有效,則檢測成功,返回true。當(dāng)遇到文件結(jié)束符或者無效的輸入(比如用一個字符來作為一個整型數(shù)的輸入時),istream的對象狀態(tài)會變?yōu)闊o效。

總而言之:

(1)  輸入數(shù)據(jù)時需要敲回車鍵才能將數(shù)據(jù)送到緩存器,cin才能讀取緩存區(qū)的數(shù)據(jù)。

(2) 當(dāng)cin遇到文件結(jié)束符(windows中為:ctrl +Z , Unix 中為:ctrl +D),或無效輸入才能使cin狀態(tài)無效。

一下這段測試代碼將說明以上問題。

代碼作用: 統(tǒng)計輸入值中數(shù)據(jù)連續(xù)出現(xiàn)的次數(shù)。

因為無法判斷輸入數(shù)據(jù)的個數(shù),所以無法采用一個定值來控制循環(huán)次數(shù)。這里我們使用cin來作為if 條件:

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {

  cout << "Enter a list of integers:" << std::endl;
  int currVal = 0;
  int val = 0;
  int cnt = 0;

  /*讀入第一個輸入的數(shù)據(jù)*/
  if ( cin >> currVal ){
    cnt = 1;
    /*循環(huán)讀入之后的數(shù)據(jù)*/
    while( cin >> val ){
      /*如果當(dāng)前讀入的數(shù)據(jù)val與之前的數(shù)據(jù)currVal相等,cnt++*/
      if (currVal == val) {
        ++cnt;
      } else {
        /*如果不相等,輸出之前數(shù)據(jù)currVal連續(xù)出現(xiàn)的次數(shù),同時重新統(tǒng)計當(dāng)前數(shù)據(jù)的連續(xù)出現(xiàn)次數(shù)*/
        cout << currVal << " occurs " << cnt << " times. " << endl;
        currVal = val;
        cnt = 1;
      }
    }
     /*打印最后一個數(shù)據(jù)的連續(xù)出現(xiàn)次數(shù)*/
    cout << currVal << " occurs " << cnt << " times. " << endl;
  }
  return 0;
}

(1)控制臺輸入 1 2 3 4 5 6 7加回車:

7的統(tǒng)計并沒有顯示,因為這個時候我們只是將數(shù)據(jù)push到了緩沖區(qū),while中的cin讀取到7,流的檢測狀態(tài)是true,所以并沒有退出循環(huán),還在等待下一個輸入數(shù)據(jù),不能執(zhí)行while循環(huán)之外的代碼,因此不能打印最后下一個數(shù)據(jù)7。

(2)控制臺輸入 1 2 3 4 5 6 7加ctrl+D:

 直接以ctrl+d結(jié)束數(shù)據(jù),數(shù)據(jù)1到7沒有提交到緩沖區(qū),而if中的cin直接讀取到文件結(jié)束符,流狀態(tài)檢測為false,if中的代碼不能執(zhí)行,直接結(jié)束程序運(yùn)行。

(3)控制臺輸入1 2 3 4 5 6 7加回車:

再輸入ctrl+D:

1到6的輸出如(2)中所述,等我們再次輸入文件結(jié)束符號時,cin流狀態(tài)為false,結(jié)束while循環(huán),因此執(zhí)行while循環(huán)之外的代碼,打印出最后一個數(shù)據(jù)7 的統(tǒng)計次數(shù)。

(4)控制臺輸入1 2 3 4 5 6 7 t 加回車:

我們輸入1到7和t之后,再enter,將數(shù)據(jù)push到緩沖區(qū)。在while循環(huán)的條件中,cin逐個讀入到val中,再執(zhí)行循環(huán)體中的代碼,最后讀到t時,企圖將字符存入到int型的變量中,無效輸入導(dǎo)致流狀態(tài)為false,種植while循環(huán),可以打印出最后一個數(shù)據(jù)的統(tǒng)計信息。

以上這篇c++ cin 作為while條件(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++數(shù)據(jù)結(jié)構(gòu)之文件壓縮(哈夫曼樹)實例詳解

    C++數(shù)據(jù)結(jié)構(gòu)之文件壓縮(哈夫曼樹)實例詳解

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之文件壓縮(哈夫曼樹)實例詳解的相關(guān)資料,利用哈夫曼編碼的方式對文件進(jìn)行壓縮,并且對壓縮文件可以解壓,需要的朋友可以參考下
    2017-07-07
  • sigsetjmp的用法總結(jié)

    sigsetjmp的用法總結(jié)

    sigsetjmp()會保存目前堆棧環(huán)境,然后將目前的地址作一個記號,而在程序其他地方調(diào)用siglongjmp()時便會直接跳到這個記號位置,然后還原堆棧,繼續(xù)程序的執(zhí)行
    2013-09-09
  • C++實現(xiàn)圖書館系統(tǒng)

    C++實現(xiàn)圖書館系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)圖書館系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實現(xiàn)支持泛型的LFU詳解

    C++實現(xiàn)支持泛型的LFU詳解

    這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)LFU的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • GetChar緩存機(jī)制深入剖析

    GetChar緩存機(jī)制深入剖析

    以下是對GetChar緩存機(jī)制進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境(教程詳解)

    Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境(教程詳解)

    這篇文章主要介紹了Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C語言由淺入深了解變量的應(yīng)用

    C語言由淺入深了解變量的應(yīng)用

    這篇文章主要介紹了C語言的變量,變量是C語言語法和語義中一個很重要的知識點,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++運(yùn)算符重載圖文詳解

    C++運(yùn)算符重載圖文詳解

    運(yùn)算符重載的方法是定義一個重載運(yùn)算符的函數(shù),在需要執(zhí)行被重載的運(yùn)算符時,系統(tǒng)就自動調(diào)用該函數(shù),以實現(xiàn)相應(yīng)的運(yùn)算。也就是說,運(yùn)算符重載是通過定義函數(shù)實現(xiàn)的
    2021-09-09
  • C++代碼實現(xiàn)雙向鏈表

    C++代碼實現(xiàn)雙向鏈表

    這篇文章主要為大家詳細(xì)介紹了C++代碼實現(xiàn)雙向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言中儲存類別與內(nèi)存管理的深入理解

    C語言中儲存類別與內(nèi)存管理的深入理解

    這篇文章主要給大家介紹了關(guān)于C語言中儲存類別與內(nèi)存管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論

天门市| 寿宁县| 湛江市| 星座| 铜陵市| 呼伦贝尔市| 德安县| 玉门市| 正蓝旗| 辽源市| 盘锦市| 兴安盟| 宜州市| 绩溪县| 阳城县| 卢氏县| 岳阳市| 博罗县| 普格县| 开阳县| 平泉县| 成武县| 丽江市| 时尚| 旌德县| 蒙山县| 昌黎县| 宁海县| 都匀市| 江北区| 砚山县| 贵州省| 阳西县| 从化市| 泰兴市| 澳门| 甘肃省| 津南区| 中江县| 象山县| 泾源县|