cin
是如何確定已完成字串輸入的呢?我們知道,不能通過鍵盤輸入空字元。因此cin
使用空白(空格、製表符和換行符)來確定字串結束的位置。cin
會忽略空格和換行符,製表符。
同時傳送給cin
的輸入將被緩衝,這意味著只有使用者在按下回車鍵之後,緩衝區的內容才會傳送給程式。
istream
中的類如cin
提供了一些面向行的類成員函式:getline()
和get
這兩個函式都讀取一行的輸入,直到到達換行符,它們的區別是,getline()
會將換行符丟棄,而get()
會將換行符保留在輸入佇列中。
//函式原型
istream& getline (
char
* s, streamsize n )
;//原型1
istream& getline (
char
* s, streamsize n,
char delim )
;//原型2
getline()
函式讀取整行,通過回車鍵輸入的換行符來確定輸入結尾。要呼叫這種方法,可使用cin.getline()
。該函式原型1有兩個接受兩個引數。第乙個引數用來接受儲存 輸入行的陣列名稱,第二個引數是要讀取的字元數n
。該函式最多接受n-1
個字元,剩餘位置用來儲存'\0'
。注意這裡接受的引數型別是char*
。
char name[10]
;cout<<
"enter your name:"
;cin.
getline
(name,10)
;//使用者輸入"jack",然後按下回車。
cin.getline()
讀取使用者輸入和鍵入enter鍵生成的換行符,並將換行符替換為'\0'
。
int
get();
istream& get (
char
& c)
; istream& get (
char
* s, streamsize n)
;//常用
istream& get (
char
* s, streamsize n,
char delim)
;//邊界字元
istream& get (streambuf& sb)
;istream& get (streambuf& sb,
char delim)
;
由函式原型知道,該函式有很多變體。我們在這裡只討論和istream::getline()
工作方式類似的一種。他們接受的引數相同,且都是讀取到行尾。get()
不丟棄換行符,而是將其留在輸入佇列中。這會導致一下問題的產生:
char name[10]
;char address[20]
;cin.
get(name,10)
;cin.
get(address,10)
;//此處會產生問題
第一此呼叫函式產生的換行符會保留在輸入佇列中,一次第二次呼叫接受的第乙個字元就是換行符,此時該函式認為已經到達行尾,發現沒有任何需要讀取的內容。這時注意到上述原型第乙個不接受任何引數的get()
,它可讀取下乙個字元(即使是換行符)。因此可用它來處理換行符。即:
char name[10]
;char address[20]
;cin.
get(name,10)
;cin.
get();
//讀取換行符
cin.
get(address,10)
;
或者
cin.
get(name,10)
.get()
;
之所以這樣做,是因為該函式呼叫會返回乙個cin
物件,可以繼續呼叫istream::get()
函式。類似的istream::getlin()
函式也一樣,具體可見函式原型。
可以用istream::get()
判斷停止讀取的原因是什麼。如果是換行符,則說明讀取了整行,否則後續還有輸入。
int num;
cin>>num;
char str[80]
;cin.
getline
(str,80)
;
在種種情況下,使用者會沒有輸入str的機會,因為cin
讀取年份生成的換行符留在輸入佇列中。此時後面的cin.getline()
看到換行符後,認為是乙個空行,並將乙個空字元賦給str
陣列。解決的方法是在cin>>num
之後加入cin.get()
。即
int num;
cin>>num;
cin.
get();
char str[80]
;cin.
getline
(str,80)
;
int num;
(cin>>num)
.get()
;char str[80]
;cin.
getline
(str,80)
;
string str;
getline
(cin,str)
;
這裡的getline()
不是類方法,它將cin
作為引數,指出到**去尋找輸入,此外string
物件會根據字串大小自動調整自己的大小。
cin
物件支援3種不同模式的單字元輸入,其使用者介面各不相。
#include
intmain()
cout<
" 字元被讀取\n"
程式會忽略空白字元。
#include
intmain()
cout<
"個字元被讀取\n"
cin.get()
會讀取空白字元,輸入仍然被緩衝。
C 輸入輸出
一 標準輸入函式cin 不知道說它是個函式對還是不對,它是代表標準的輸入裝置 鍵盤。他是屬於流的,他的用法和流的用法是一樣的。也就是 cin 變數 小小的說明一下,輸入多個變數可以寫在一行,如 cin x y z 這樣寫不是不允許,而是不好看,如果是不同的變數型別,那就更是沒頭沒腦了。除了你,人家是...
C 輸入輸出
c語言不提供輸入輸出語句,輸入輸出操作有函式來實現。c的標準庫函式中提供了許多輸入輸出函式,如printf scanf 等,使用時需要新增相應的標頭檔案 scanf d num 逗號前為控制語句,後半部分為變數的位址。當中 d是輸入格式控制字串 scanf 函式在接受輸入資料是預設不採集空格,回車,...
C 輸入輸出
c 中的一些常用輸入輸出 include include include include using namespace std void win io 由控制台輸入 void file io 檔案進行輸入 in file.close void file io 2 in file.close in ...