C 輸入輸出

2021-10-22 09:11:35 字數 3635 閱讀 5359

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 ...