1. 程式人生 > 其它 >c++學習筆記(六)

c++學習筆記(六)

技術標籤:學習筆記c++

今天拔牙去了,好疼嗚嗚嗚

字串輸入方法

普通輸入
cin每次只識別一個單詞,也就是說如果你中間輸入空格了,他只記錄空格之前的東西
例子如下:

#include<iostream>
int main(){
    using namespace std;
    const int Arsize = 20;
    char name[Arsize];
    char dessert[Arsize];
    cout<<"Enter your name\n";
    cin>>name;
    cout<<
"enter yr favorite dessert:\n"; cin>>dessert; cout <<"I have some delicious "<<dessert; cout<<" for you,"<<name<<".\n"; return 0; }

輸出結果是
Enter your name
Alistair Dreeb
enter yr favorite dessert:
I have some delicious Dreeb for you,Alistair.

面向行的輸入
在上述程式碼中把cin稍作修改

const int Arsize = 20;
    char name[Arsize];
    char dessert[Arsize];
    cout<<"Enter your name\n";
    cin.getline(name,Arsize);
    cout<<"enter yr favorite dessert:\n";
    cin.getline(dessert,Arsize);
	cout <<"I have some delicious "
<<dessert; cout<<" for you,"<<name<<".\n";

cin.getline()函式可以自定義讀取資料的長度,而剩下的將被下一次cin所讀取
格式為
cin(要寫入的變數,長度)
最後的輸出為
輸出結果
他的原理是會把使用者輸入的換行符替換成空字元,插入到末尾,也就是按enter和到達指定的輸入數量就結束讀取,剩下的留給下一次cin
另一種輸入方式是cin.get()
他和cin.getlin()的區別是,get並不再讀取和丟棄換行符,而是將其留在輸入佇列中
還可以get後面再跟get
現在把程式碼改成這樣

	const int Arsize = 20;
    char name[Arsize];
    char dessert[Arsize];
    cout<<"Enter your name\n";
    cin.get(name,Arsize).get(); 
    cout<<"enter yr favorite dessert:\n";
    cin.get(dessert,Arsize).get();
	cout <<"I have some delicious "<<dessert;
    cout<<" for you,"<<name<<".\n";

如果只用一個get,基本上只有字元超出20個的範圍才會把 剩下的傳給dessert不然就全部傳給name
這是因為get這個函式他不會跳過換行符,如果輸入了換行符的化那麼前面的整體會被視作一部分,而單獨的get呢是讀取了一個字元
這麼看來整個情況可以這麼理解:
第一次如果你只輸入了cin.get(name,Arsize)那麼,當你回車的時候,其實回車已經被儲存到了第二次的get裡,所以會直接輸出。而加了.get()之後,相當於是吸收了後面的換行符,這樣就可以了

混合輸入字串和數字

cout<<"What year was your house built?\n";
	int year;
	(cin>>year).get();
	cout<<"WHAT is its street address?\n";
	char address[80];
	cin.get(address,80);
	cout<<"Year built:"<<year<<endl;
	cout<<"ADDRESS:"<<address<<endl;
	return 0;

在這裡,第一次如果只輸入cin>>year,那麼餘下的換行符會放在輸入佇列後,再要輸入address就會失敗,因為換行符被留在了第二次的cin,想要正常輸入要用get()讀取