天天看點

C++标準輸入流對象cin需重點掌握的函數

C++标準輸入流對象cin需重點掌握的函數

    • 1. cin.get()
    • 2. cin.getline()
    • 3. cin.ignore()
    • 4. cin.peek()
    • 5. cin.putback()

1. cin.get()

cin.get()

一次隻能從緩沖區拿走一個字元

void test01(){
	// 輸入as   緩沖區中  a  s  換行    第一個拿  a  第二個 拿 s  第三次拿換行 第四次等待下次輸入
	char c = cin.get();
	cout << "c = " << c << endl;

	c = cin.get();
	cout << "c = " << c << endl;

	c = cin.get();
	cout << "c = " << c << endl;

	c = cin.get();
	cout << "c = " << c << endl;
}
           

運作結果:

C++标準輸入流對象cin需重點掌握的函數

cin.get(兩個參數)

可以拿取字元串,不會把換行符拿走,遺留在緩沖區中

void test02(){
	//cin.get(兩個參數) //可以讀字元串
	char buf[1024];
	cin.get(buf, 1024);

	char c = cin.get();

	if (c == '\n'){
		cout << "換行還在緩沖區" << endl;
	}
	else{
		cout << "換行不在緩沖區" << endl;
	}
	cout << buf << endl;
}
//cin.get(兩個參數)讀取字元串時,不會把換行符拿走,遺留在緩沖區中
           

運作結果:

C++标準輸入流對象cin需重點掌握的函數

2. cin.getline()

文法:

cin.getline(字元指針(char*),字元個數N(int),結束符(char));

  此函數會一次讀取多個字元(包括空白字元)。它以指定的位址為存放第一個讀取的字元的位置,依次向後存放讀取的字元,直到讀滿N-1個,或者遇到指定的結束符為止。若不指定結束符,則預設結束符為換行符,此函數并不保留結束符,它通過結束符确定結束,但不儲存結束符,它用空字元來替換結束符。

void test03(){
	char buf[1024];
	cin.getline(buf, 1024);
	char c = cin.get();//如果把換行符也讀取了,緩沖區沒有資料,此行代碼會阻塞,等待輸入
	if (c == '\n'){
		cout << "換行還在緩沖區" << endl;
	}
	else{
		cout << "換行不在緩沖區" << endl;
	}
	//cin.getline 把換行符讀取,并且扔掉
}
           

運作結果:

C++标準輸入流對象cin需重點掌握的函數

3. cin.ignore()

cin.ignore();

沒有參數 代表忽略一個字元 ,帶參數N,代表忽略N個字元

void test04(){
	cin.ignore(2); //沒有參數 代表忽略一個字元 ,帶參數N,代表忽略N個字元
    char buf[1024];
	cin.getline(buf,1024);
	cout << "buf = " << buf << endl;
}
           
C++标準輸入流對象cin需重點掌握的函數

4. cin.peek()

cin.peek()

擷取一下第一個字元,然後再放回緩沖區

void test05(){
	//輸入as  偷看一眼 a,然後再放回緩沖區 緩沖區中還是as
	char c = cin.peek();
	cout << "c = " << c << endl;
	c = cin.get();
	cout << "c = " << c << endl;
}
           

運作結果:

C++标準輸入流對象cin需重點掌握的函數

5. cin.putback()

cin.putback()

将字元放回到輸入流中

void test06(){
	char c = cin.get();
	cin.putback(c);

	char buf[1024];

	cin.getline(buf,1024);
	cout << buf << endl;
}
           

運作結果:

C++标準輸入流對象cin需重點掌握的函數