關於C 中的cin的一點理解

2021-07-07 07:33:42 字數 2102 閱讀 2018

作為一名初學者,常常會遇到用命令列,進行輸入的情況,往往輸入的是字元或者數字。一開始的時候,我們首先接觸的是,

int i=0;

cin>>i;

這樣的**。其實cin>>本身也蠻好的,就是不能輸入帶空格的,這個運算子遇到空格會停止取值。

字串的儲存往往通過string和char陣列。和這兩個相關的cin函式有get()和getline()。在這兩個函式面前該選擇哪乙個,已經有什麼不同,我在網上找了一下資料,發現沒有相關的整理,在此發文總結總結。

首先說當需要輸入的是char陣列的情況,char陣列一般的用法是

char name[len];

std::cin.getline(name,len);

std::cin.get(name,len);
然後是string的情況,string的一般用法是

string str;

getline(cin,str);

cin>>str;

string類沒有get函式的用法。而且把cin放到getline裡面是string類獨有的。

其實string類相當於乙個const char陣列,甚至可以把string的位址賦給乙個const char指標。

string str;

const char* ch= str.c_str();

然後可以通過ch[i]來訪問各個字元;甚至不用這麼麻煩str[i]本身就是各個字元;

反過來,可以給string用char*來賦值,用snprintf

string s;

char c[50];

snprintf(ch,50,"要輸入的字元有幾個:%d",n);

s=ch;

最後是輸入數字,輸入數字還是比較簡單的cin>>i就可以解決了,不過這裡有點小技巧。需要判斷輸入的是否是數字可以這麼做

int i;

while(!(std::cin>>i))

不過,這裡引申出了乙個問題就是,下面這樣的**

char temp[len]

int i;

cin>>i;

cin.getline(temp len);

cout<

執行後發現,程式只讓輸入一次,但是看**,我們想要的結果是輸入兩次,我輸入乙個數字,加了斷電看看,i的值是沒錯,不過temp[0]就是'\0',直接是字串的末尾了。然後我試著輸入乙個數字加乙個字串  10code,卻發現結果意外得正確。i=10而且code存進了temp陣列裡,而且我試著講兩者的順序倒了一下

cin.getline(temp len);cin>>i;

結果是正確的,出現了兩次輸入。所以我做了乙個假設,cin.getline會清空cin的快取區,而cin>>不會。可是這樣。

int i,j;

cin>>i;

cin>>j;

就解釋不通了。後來無意中的乙個實驗讓我想清楚了,我們都知道字串在電腦中的儲存方式是,比如"i love coding"是 i love coding\0最後會加上乙個\0。而cin讀取時會自動把這個給過濾掉,而get和getline不行,所以先cin>>後getline會導致getline讀取了乙個\0,。所以上面的問題正確的解法是

char temp[len]

int i;

cin>>i;

cin.get();

cin.getline(temp len);

cout《然後結果就正確啦。

所以我們看cin的時候,要知道這個函式到底會不會自動過濾'\0',以及會將cin的快取中的指標移動到什麼位置。cin讀的時候會過濾掉'/0',但只會將指標移到'/0'前。getline讀的時候不會過濾掉'/0,但會將指標移到'/0後。get讀的時候不會過濾掉'/0,並且將指標停在了'/0前,但如果僅僅發現一開始就是'/0',則會將指標移到'/0'後。

關於malloc的一點理解

在函式中使用malloc,如果是大的記憶體分配,而且malloc與free的次數也不是特別頻繁,使用malloc與free是比較合適的,但是如果記憶體分配比較小,而且次數特別頻繁,那麼使用malloc與free就有些不太合適了。因為過多的malloc與free容易造成記憶體碎片,致使可使用的堆記憶體...

關於HTTPS的一點理解

通訊使用明文 不加密 內容可能會被竊聽。不驗證通訊方的身份,因此有可能遭遇偽裝。無法證明報文的完整性,所以有可能已經遭到篡改。https http 認證 加密 完整性保護 https是與ssl 安全套接層 組合使用的http協議 http secure 使用ssl之後,請求則變成先和ssl通訊,ss...

關於Action的一點理解

之前學習jsp,就是從網上找些jsp例項 然後模仿,再加工成自己想要的,這樣一來,好多東西都是學了一點皮毛,例如action。下面是在看書時所知道的,看完後,有種頓悟的感覺。action的主要功能是生成頁面顯示所需要的資料,頁面則負責顯示action中的所設定的資料。頁面中的標籤在獲得action所...