1. 程式人生 > >cin.get()和cin.getline()

cin.get()和cin.getline()

get()函式是cin輸入流物件的成員函式,它有3種形式:無引數的,有一個引數的,有3個引數的。

無參:cin.get()

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

int main()
{
	char c;
	cout << "enter a sentence:" << endl;
	while ((c=cin.get())!= EOF)
		cout.put(c);
	return 0;
}

input:hello c++

output:hello c++

C語言中的getchar函式與流成員函式cin.get( )的功能相同,C++保留了C的這種用法,可以用getchar(c)從鍵盤讀入一個字元賦給c。

帶一個引數:cin.get(ch)

其作用是從輸入流中讀取一個字元,賦給字元變數ch。如果讀取成功則函式返回true(真),如失敗(遇檔案結束符) 則函式返回false(假)。

int main()
{
	char c;
	cout << "enter a sentence:" << endl;
	while (( cin.get(c)))
		cout.put(c);
	return 0;
}

帶三個引數:cin.get(字元指標, 字元個數n, 終止字元)

其作用是從輸入流中讀取n-1個字元,賦給指定的字元陣列(或字元指標指向的陣列),如果在讀取n-1個字元之前遇到指定的終止字元,則提前結束讀取。如果讀取成功則函式返回true(真),如失敗(遇檔案結束符) 則函式返回false(假)。

int main()
{
	char buf[20];
	cout << "enter a sentence:" << endl;
	cin.get(buf, 10, 'c');
	cout << buf << endl;
	cout << strlen(buf) << endl;
	return 0;
}

getline函式的作用是從輸入流中讀取一行字元,其用法與帶3個引數的get函式類似。
    cin.getline(字元陣列(或字元指標), 字元個數n, 終止標誌字元)

int main()
{
	char buf[20];
	cout << "enter a sentence:" << endl;
	cin >> buf;//遇到空格終止
	cout << buf << endl;
	cin.getline(buf, 20, '/');//在讀滿10個字元之前若遇到‘/’則會提前終止
	cout << buf << endl;
	cin.getline(buf, 20,'/');//在讀滿10個字元之前若遇到‘\n’則會提前終止,即預設終止字元為‘\n’
	cout << buf << endl;

	return 0;
}
int main()
{
	char buf[20];
	cout << "enter a sentence:" << endl;
	cin >> buf;//遇到空格終止
	cout << buf << endl;
	cin.get(buf, 20, '/');//在讀滿10個字元之前若遇到‘/’則會提前終止
	cout << buf << endl;
	cin.getline(buf, 20,'/');//在讀滿10個字元之前若遇到‘\n’則會提前終止,即預設終止字元為‘\n’
	cout << buf << endl;

	return 0;
}

分析上面兩端程式碼,得出cin.getline()如何使用以及與cin.get()的差異:

  • 用getline函式從輸入流讀字元時,遇到終止標誌字元時結束,指標移到該終止標誌字元之後,下一個getline函式將從該終止標誌的下一個字元開始接著讀入,如果用cin.get函式從輸入流讀字元時,遇終止標誌字元時停止讀取,指標不向後移動,仍然停留在原位置。下一次讀取時仍從該終止標誌字元開始。這是getline函式和get函式不同之處。因此用get函式時要特別注意,必要時用其他方法跳過該終止標誌字元,如ignore函式,但一般來說還是用getline函式更便捷。
  • “cin<<”和用成員函式cin.getline()讀資料的區別。用“cin<<”讀資料時以空白字元(包括空格、tab鍵、回車鍵)作為終止標誌,而用cin.getline()讀資料時連續讀取一系列字元,可以包括空格。用“cin <<”可以讀取C++的標準型別的各型別資料(如果經過過載,還可以用於輸入自定義型別的資料),而用cin.getline()只用於輸入字元型資料。