程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> 一些與輸入有關的istream類成員函數

一些與輸入有關的istream類成員函數

編輯:C++基礎知識
除了前面介紹的用於讀取數據的成員函數外,istream類還有其他在輸入數據時用得著的一些成員函數。

eof 函數

eof是end of file的縮寫,表示“文件結束”。從輸入流讀取數據,如果到達文件末尾(遇文件結束符),eof函數值為非零值(真),否則為0(假)。

[例13.8] 逐個讀入一行字符,將其中的非空格字符輸出。
#include <iostream>
using namespace std;
int main( )
{
   char c;
   while(!cin.eof( ))  //eof( )為假表示未遇到文件結束符
   if((c=cin.get( ))!=' ')  //檢查讀入的字符是否為空格字符
      cout.put(c);
   return 0;
}
運行情況如下:
C++ is very interesting.↙
C++isveryinteresting.
^Z(結束)

peek函數

peek是“觀察”的意思,peek函數的作用是觀測下一個字符。其調用形式為:
    c=cin.peek( );
函數的返回值是指針指向的當前字符,但它只是觀測,指針仍停留在當前位置,並不後移。如果要訪問的字符是文件結束符,則函數值是EOF(-1)。

putback函數

其調用形式為
    cin.putback(ch);
其作用是將前面用get或getline函數從輸入流中讀取的字符ch返回到輸入流,插入到當前指針位置,以供後面讀取。

[例13.9] peek函數和putback函數的用法。
#include <iostream>
using namespace std;
int main( )
{
   char c[20];
   int ch;
   cout<<"please enter a sentence:"<<endl;
   cin.getline(c,15,'/');
   cout<<"The first part is:"<<c<<endl;
   ch=cin.peek( );  //觀看當前字符
   cout<<"The next character(ASCII code) is:"<<ch<<endl;
   cin.putback(c[0]);  //將'I'插入到指針所指處
   cin.getline(c,15,'/');
   cout<<"The second part is:"<<c<<endl;
   return 0;
}
運行情況如下:
please enter a sentence:
I am a boy./ am a student./↙
The first part is:I am a boy.
The next character(ASCII code) is:32(下一個字符是空格)
The second part is:I am a student

ignore函數

其調用形式為
    cin.ignore(n, 終止字符)
函數作用是跳過輸入流中n個字符,或在遇到指定的終止字符時提前結束(此時跳過包括終止字符在內的若干字符)。如
    ighore(5, 'A')  //跳過輸入流中個字符,遇'A'後就不再跳了
也可以不帶參數或只帶一個參數。如
    ignore( )  // n默認值為,終止字符默認為EOF
相當於
    ignore(1, EOF)

[例13.10] 用ignore函數跳過輸入流中的字符。先看不用ignore函數的情況:
#include <iostream>
using namespace std;
int main( )
{
   char ch[20];
   cin.get(ch,20,'/');
   cout<<"The first part is:"<<ch<<endl;
   cin.get(ch,20,'/');
   cout<<"The second part is:"<<ch<<endl;
   return 0;
}
運行結果如下:
I like C++./I study C++./I am happy.↙
The first part is:I like C++.
The second part is:(字符數組ch中沒有從輸入流中讀取有效字符)

如果希望第二個cin.get函數能讀取"I study C++.",就應該設法跳過輸入流中第一個'/',可以用ignore函數來實現此目的,將程序改為:
#include <iostream>
using namespace std;
int main( )
{
   char ch[20];
   cin.get(ch,20,'/');
   cout<<"The first part is:"<<ch<<endl;
   cin.ignore( );//跳過輸入流中一個字符
   cin.get(ch,20,'/');
   cout<<"The second part is:"<<ch<<endl;
   return 0;
}
運行結果如下:
I like C++./I study C++./I am happy.↙
The first part is:I like C++.
The second part is:I study C++.

以上介紹的各個成員函數,不僅可以用cin流對象來調用,而且也可以用istream類的其他流對象調用。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved