程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++的get()函數與getline()函數應用詳解

C++的get()函數與getline()函數應用詳解

編輯:關於C++

C++的get()函數與getline()函數應用詳解。本站提示廣大學習愛好者:(C++的get()函數與getline()函數應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++的get()函數與getline()函數應用詳解正文


C++ get()函數讀入一個字符
get()函數是cin輸出流對象的成員函數,它有3種情勢:無參數的,有一個參數的,有3個參數的。
1) 不帶參數的get函數
其挪用情勢為

  cin.get()


用來從指定的輸出流中提取一個字符(包含空白字符),函數的前往值就是讀入的字符。 若碰到輸出流中的文件停止符,則函數值前往文件停止標記EOF(End Of File),普通以-1代表EOF,用-1而不消0或正值,是斟酌到不與字符的ASCII代碼混雜,但分歧的C ++體系所用的EOF值有能夠分歧。

[例] 用get函數讀入字符。

#include <iostream>
using namespace std;
int main( )
{
int c;
cout<<"enter a sentence:"<<endl;
while((c=cin.get())!=EOF)
cout.put(c);
return 0;
}


運轉情形以下:

enter a sentence:
I study C++ very hard.↙(輸出一行字符)
I study C++ very hard.       (輸入該行字符)
^Z↙(法式停止)

C說話中的getchar函數與流成員函數cin.get( )的功效雷同,C++保存了C的這類用法,可以用getchar(c)從鍵盤讀入一個字符賦給c。

2) 有一個參數的get函數
其挪用情勢為

 cin.get(ch)

其感化是從輸出流中讀取一個字符,賦給字符變量ch。假如讀取勝利則函數前往true(真),如掉敗(遇文件停止符) 則函數前往false(假)。下面的例子可以改寫以下:

#include <iostream>
using namespace std;
int main( )
{
  char c;
  cout<<"enter a sentence:"<<endl;
  while(cin.get(c)) //讀取一個字符賦給字符變量c,假如讀取勝利,cin.get(c)為真
  {cout.put(c);}
  cout<<"end"<<endl;
  return 0;
}

3) 有3個參數的get函數
其挪用情勢為
    cin.get(字符數組, 字符個數n, 終止字符)

    cin.get(字符指針, 字符個數n, 終止字符)
其感化是從輸出流中讀取n-1個字符,賦給指定的字符數組(或字符指針指向的數組),假如在讀取n-1個字符之前碰到指定的終止字符,則提早停止讀取。假如讀取勝利則函數前往true(真),如掉敗(遇文件停止符) 則函數前往false(假)。再將例13.6改寫以下:

#include <iostream>
using namespace std;
int main( )
{
  char ch[20];
  cout<<"enter a sentence:"<<endl;
  cin.get(ch,10,'\\n');//指定換行符為終止字符
 cout<<ch<<endl;
  return 0;
}

運轉情形以下:

enter a sentence:
I study C++ very hard.↙
I study

在輸出流中有22個字符,但因為在get函數中指定的n為10,讀取n -1個(即9個)字符並賦給字符數組ch中前9個元素。有人能夠要問:指定n-10,為何只讀取9個字符呢?由於寄存的是一個字符串,是以在9個字符以後要參加一個字符串停止標記,現實上寄存到數組中的是10個字符。請讀者思慮:假如不參加字符串停止標記,會 湧現甚麼情形?成果是:在用“cout<<ch”;輸入數組中的字符時,不是輸入讀入的字符串,而是數組中的全體元素。年夜家可以親身測試一下ch[9](即數組中第10個元素)的值是甚麼。

假如輸出↙

  abcde

即未讀完第9個字符就碰到終止字符、讀取操作終止,前5個字符已寄存到數組ch[0]到ch[4]中,ch[5]中寄存'\0'。

假如在get函數中指定的n為20,而輸出22個字符,則將輸出流中前19個字符賦給字符數組ch中前19個元素,再參加一個'\0'。

get函數中第3個參數可以省寫,此時默許為'\n'。上面兩行等價:

  cin.get(ch,10,'\\n');
  cin.get(ch,10);


終止字符也能夠用其他字符。如

  cin.get(ch,10,'x');


在碰到字符'x'時停滯讀取操作。

C++ getline()函數讀入一行字符
getline函數的感化是從輸出流中讀取一行字符,其用法與帶3個參數的get函數相似。即
    cin.getline(字符數組(或字符指針), 字符個數n, 終止標記字符)

[例] 用getline函數讀入一行字符。

#include <iostream>
using namespace std;
int main( )
{
  char ch[20];
  cout<<"enter a sentence:"<<endl;
  cin>>ch;
  cout<<"The string read with cin is:"<<ch<<endl;
  cin.getline(ch,20,'/'); //讀個字符或遇'/'停止
  cout<<"The second part is:"<<ch<<endl;
  cin.getline(ch,20); //讀個字符或遇'/n'停止
  cout<<"The third part is:"<<ch<<endl;
  return 0;
}

法式運轉情形以下:

enter a sentence: I like C++./I study C++./I am happy.↙
The string read with cin is:I
The second part is: like C++.
The third part is:I study C++./I am h

請細心剖析運轉成果。用“cin>>”從輸出流提取數據,遇空格就終止。是以只讀取 一個字符'I',寄存在字符數組元素ch[0]中,然後在ch[1]中寄存'\0'。是以用"cout<<ch"輸入時,只輸入一個字符'I'。然後用cin.getline(ch, 20, '/')從輸出流讀取19個字符 (或遇停止)。請留意:此時其實不是從輸出流的開首讀取數據。在輸出流中有一個字符指針,指向以後應拜訪的字符。在開端時,指針指向第一個字符,在讀入第一個字符'I'後,指針就移到下一個字符('I'前面的空格),所以getline函數從空格讀起,碰到就停滯,把字符串" like c++."寄存到ch[0]開端的10個數組元素中,然後用"cout<<ch"輸入這10個字符。留意:遇終止標記字符"/"時停滯讀取其實不放到數組中。再用cin.getline(ch, 20)讀19個字符(或遇'/n'停止),因為未指定以'/'為停止標記,所以第2個'/'被看成普通字符讀取,共讀入19個字符,最初輸入這19個字符。

有幾點解釋並請讀者思慮:
1) 假如第2個cin.getline函數也寫成cin. getline(ch, 20, '/''),輸入成果會若何? 此時最初一行的輸入為:

  The third part is: I study C++.

2) 假如在用cin.getline(ch, 20, '/')從輸出流讀取數據時,碰到回車鍵("\n"),能否 停止讀取?結論是此時"\n"不是停止標記"\n"被作為一個字符被讀入。

3) 用getline函數從輸出流讀字符時,碰到終止標記字符時停止,指針移到該終止標記字符以後,下一個getline函數將從該終止標記的下一個字符開端接著讀入,如本法式運轉成果所示那樣。假如用cin.get函數從輸出流讀字符時,遇終止標記字符時停滯讀取,指針不向後挪動,依然逗留在原地位。下一次讀取時仍從該終止標記字符開端。這是getline函數和get函數分歧的地方。假設把例子法式中的兩個cin.line函數挪用都改成以下函數挪用:

  cin.getline(ch, 20, '/');


則運轉成果為:

enter a sentence: I like C++./I study C++./I am happy.↙
The string read with cin is: I
The second part is: like C++.
The third part is:  (沒有從輸人流中讀取有用字符)

第2個cin. getline(ch, 20, '/')從指針以後地位起讀取字符,碰到的第1個字符就是終止標記字符讀入停止,只把"\0"寄存到ch[0]中,所以用“cout<<ch”輸入時無字符輸入。

是以用get函數時要特殊留意,需要時用其他辦法跳過該終止標記字符(如用前面引見的ignore函數,概況請檢查:一些與輸出有關的istream類成員函數),但普通來講照樣用getline函數更便利。

4) 請比擬用“cin<<”和用成員函數cin.getline()讀數據的差別。用“cin<<”讀數據時以空白字符(包含空格、tab鍵、回車鍵)作為終止標記,而用cin.getline()讀數據時持續讀取一系列字符,可以包含空格。用“cin <<”可以讀取C++的尺度類型的各類型數據(假如經由重載,還可以用於輸出自界說類型的數據),而用cin.getline()只用於輸出字符型數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved