C++中cin.get 和cin.peek 及其相關的用法

今天寫代碼遇到了 一點點困惑,題目要求大體爲:html

  輸入一串數字(包含一些空格)當鍵入回車時計算出輸入數字的和ios

其實現代碼以下:數組

 1 #include<iostream>
 2 using namespace std;  3 
 4 int main()  5 {  6      int a;  7      int sum;  8      
 9      while(cin>>a) 10  { 11          sum+=a; 12          while(cin.peek()==' ')//觀測到當前字符爲空格的話 13  { 14              cin.get();    //從流中提取當前的空格 15  } 16          
17          if(cin.peek()=='\n')  //觀測到當前字符爲換行符的話直接終止 18          break; 19  } 20      
21      cout<<"結果是:"<<sum<<endl; 22      return 0; 23     
24  }

 

程序裏用到了cin.peek()和cin.get(),順便學習一下這兩個的用法:函數

參考博文傳送門:http://c.biancheng.net/cpp/biancheng/view/2231.html學習

        https://blog.csdn.net/ReCclay/article/details/60782267測試

下面是我對於這兩個函數用法的一個簡單輸出測試:spa

 1 #include<iostream>
 2 using namespace std;  3 
 4 int main()  5 {  6     int a;  7     int b;  8     int c;  9     while(cin>>a) 10  { 11         b+=a; 12         while(cin.peek()==' ') //探測到空格 
13  { 14             c=cin.get(); //這裏是提取出空格 
15             cout<<"a="<<a<<endl ; 16  } 17         if(cin.peek()=='\n') 18  { 19             break; 20  } 21         
22  } 23     cout<<"和爲:"<<b<<endl; 24     cout<<"c = "<<c<<endl; 25 }

測試輸入輸出結果爲:【輸入爲1 2 3 4 5】.net

  

【輸入爲12 13 14 2 3】指針

 

  這裏c實際上是提取出的空格的ASCII碼,因此是32,而至於a則是每次提取提取出的數字。code

 cin.get()

  函數是cin輸入流對象的成員函數,它有3種形式:無參數的,有一個參數的,有3個參數的。

  無參數的相似於C語言中的getchar(),從制定的輸入流中提取一個字符。C語言中的getchar函數與流成員函數cin.get( )的功能相同,C++保留了C的這種用法,能夠用getchar(c)從鍵盤讀入一個字符賦給c。

  無參數用來從指定的輸入流中提取一個字符(包括空白字符),函數的返回值就是讀入的字符。 若遇到輸入流中的文件結束符,則函數值返回文件結束標誌EOF(End Of File),通常以-1表明EOF,用-1而不用0或正值,是考慮到不與字符的ASCII代碼混淆,但不一樣的C ++系統所用的EOF值有可能不一樣。

有一個參數:

      cin.get(ch)
   其做用是從輸入流中讀取一個字符,賦給字符變量ch。若是讀取成功則函數返回true(真),如失敗(遇文件結束符) 則函數返回false(假)。

有兩個參數:

      cin.get(字符數組, 字符個數n, 終止字符)
  或
      cin.get(字符指針, 字符個數n, 終止字符)
  其做用是從輸入流中讀取n-1個字符,賦給指定的字符數組(或字符指針指向的數組),若是在讀取n-1個字符以前遇到指定的終止字符,則提早結束讀取。若是讀取成功則函數返回true(真),如失敗(遇文件結束符) 則函數返回false(假)。

傳送門:http://c.biancheng.net/cpp/biancheng/view/2231.html

    https://blog.csdn.net/ReCclay/article/details/60782267

cin.peek()

  cin.peek() 其返回值是一個char型的字符,其返回值是指針指向的當前字符, 
  但它只是觀測,指針仍停留在當前位置,並不後移。若是要訪問的字符是文件結束符,則函數值是EOF(-1)

 1 #include <iostream>
 2 using namespace std;  3 int main ()  4 {  5     char c;  6     int n;  7     char str[256];  8     cout << "Enter a number or a word: ";  9     c=cin.peek(); 10     if ( (c >= '0') && (c <= '9') ) 11  { 12         cin >> n; 13         cout << "You have entered number " << n << endl; 14  } 15     else
16  { 17         cin >> str; 18         cout << " You have entered word " << str << endl; 19  } 20     return 0; 21 }
相關文章
相關標籤/搜索