c++學習筆記(六)
阿新 • • 發佈:2021-01-26
今天拔牙去了,好疼嗚嗚嗚
字串輸入方法
普通輸入
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()讀取