學c++有一段時間了,還沒有進入到oop的階段,想把基礎打牢一點,所以就從最基本的語法開始看起。因為有c語言的基礎,所以剛開始感覺學起來也不是很難,大部分也都能理解,直到我遇到下面這個困惑,我才開始注意到c++中關於輸入的一些問題。也許這些問題很基礎,但是對於想真正學好這門語言的人來說,就必須注意這些細節。
while(!(cin>>golf[i]))
剛開始很困惑cin.get()這個部分,因為我感覺上面cin>>golf[i]不是已經輸入資料了嗎,後面還要cin.get()幹嘛呢。後來查了一些資料,才了解到c++的輸入和c語言是不一樣的,c++的輸入用到了緩衝區的概念。
緩衝區是將資訊從裝置傳輸到程式或者從程式傳輸給裝置的臨時儲存工具。通俗地講,緩衝區相當於乙個大壩,上游(裝置)下雨了(輸入資料),大壩開始蓄水,蓄滿(回車時)之後,大壩開閘放水,水流入下游(程式),從緩衝區的概念就可以解釋上面的問題了。首先程式執行到cin>>golf[i]時,因為緩衝區是空的,所以可以一直輸入,直到遇到回車。注意,這個時候資料是進入了緩衝區。輸入完畢之後(例如:must回車),cin>>golf[i]將會從緩衝區中讀取第乙個字元,由於之前定義的golf陣列是int型,所以返回false(程式的要求是輸入整型陣列),進入while迴圈。這時候cin.get()會繼續從緩衝區讀取資料,讓資料從緩衝區流出,直到行尾。它的作用相當於刪除之前的錯誤輸入,把緩衝區清空。由於cin.clear()重置了輸入,所以可以繼續輸入。如果沒有這句**,後果就是無限迴圈,因為資料如果定義的是int型別,cin將不斷進行讀取直到遇到非數字字元,所以遇到『m』之後,便不再進行讀取,而這個時候測試條件一直為真,就是無限迴圈了。下面總結一下c++的幾種常見輸入方式:
1、cin>>
int a;
char ch;
int b[5];
cin>>a;
cin>>ch;
for (int i;i<5;++i)
cin>>b[i];
這沒什麼好說的,直接輸入。輸入資料之後,cin會根據定義的資料型別從緩衝區中讀取。另外如果cin>>b[i]位於迴圈中,那麼該表示式將返回bool型別。
2、cin.get()
char ch;
cin.get(ch);
while(cin.fail()==false)
無引數的
cin.get()返回的是輸入中的下乙個字元,所以是char型。
5、getline(cin,str)
string str;
getline(cin,str);
這種方式主要用於string類字串的輸入。 C 的幾種從鍵盤輸入方式
我們都知道,c 可以從鍵盤來讀取輸入,讀取輸入的方式也有好多種,下面 我們來介紹常見的幾種方式 和他們的不同之處 1 cin 使用cin輸入時,程式將輸入視為一系列位元組。每個位元組都被解釋為字元編碼。不管資料型別是什麼,輸入一開始都是字元資料,然後 cin物件負責將資料轉換成其他型別 例如 str...
c 的幾種輸入方法
c 中幾個輸入函式的用法和區別 cin cin.get cin.getline getline gets getchar 1 cin 1 cin.get 2 cin.getline 3 getline 4 gets 5 getchar 1 cin 用法1 最基本,也是最常用的用法,輸入乙個數字 in...
TextBox只能輸入數字幾種判斷方式
前台 function isnum 後台 protected void button1 click object sender,eventargs e catch exception 第一種 try catch方法 例 try catch exception ex 注 如果有很多字串要求判斷,此方法...