1. 程式人生 > >c++中輸入字串--cin.get和cin.getline用法

c++中輸入字串--cin.get和cin.getline用法

c++中cin輸入字串,這個跟java中的scanner物件有點像,今天來說一說cin中get()和getline()用法。首先先說一下兩者的區別:

1、getline()在輸入結束後丟棄換行符,在儲存字串時用空字元來替換換行符,也就是‘\0’。而get()將換行符保留在輸入佇列中。

2、getline()裡面必須包含兩個引數,陣列名和長度。而get()引數可以為空,引數為空時,讀取一個字元。也可以有兩個和getline()一樣的引數。

看一段程式:

	const int size = 20;
	char a[size],b[size];
	cin.getline(a,size);		//輸入a
	cout<<a<<endl;
	cin.getline(b,size);		//輸入b
	cout<<b<<endl;
	cin.get(a,size);			//輸入a
	cout<<a<<endl;
	cin.get(b,size).get();	  //這行cin取到的是回車鍵,也就是換行符
	cout<<b<<endl;
	system("pause");			//保證程式執行結束後不會閃退
	return 0;
我們輸入和輸出的結果是:



程式解讀:定義兩個char型的陣列,我們都知道char陣列可以儲存字串。在程式中用cin.getline(a,size)來向陣列a中寫資料,輸入ab s,然後列印。這個沒什麼說的,注意的就是getline中的引數,第一個是陣列的名,第二個是允許讀入的字串的長度。下面輸入b,跟這個一樣。

在後面我們用get()向陣列中寫資料就會出現問題。在呼叫cin.get(a,size)後,螢幕錄入資料af d,然後回車。我們發現cin.get(b,size).get(),這行並沒有執行。原因:由於在呼叫cin.get(a,size)之後我們要輸入一個回車,在呼叫cin.get(b,size).get()時,系統預設將回車看做他的輸入,因此直接呼叫了cout<<b<<endl;輸出b。最後system("pause")是保證程式執行結束後不會閃退。

這裡說一下cin.get(b,size).get()這句話。cin.get(b,size)結束後返回一個cin的物件,用這個物件在呼叫get()方法,能夠處理回車鍵的麻煩。其實這條語句可以用兩條語句來解釋:

cin.get(b,size);

cin.get();

這樣做的效果是一樣的。只是將輸入結束後的回車鍵另做處理。

這裡在額外的說一下java中的scanner,如果定義一個scanner物件,例如

		Scanner sc = new Scanner(System.in);
		int a  = sc.nextInt();
		String s = sc.nextLine();
		System.out.println(a + s);

程式輸入4然後回車會直接輸出4。這個跟c++中的是一個道理,程式把輸入4後的回車當成了一個字串。