輸入輸出那些事

2021-09-06 06:05:24 字數 3172 閱讀 1084

1.如果不加cin.ignore();這行,s2將不會被輸入。原因是緩衝區每次結尾的時候還有/n,而getline()一開始讀的時候認為已經結束,就返回空行。

1 #include 2 #include 

3using

namespace

std;

4int

main( )

5

2.ignore函式 

功能:函式用於輸入流。它讀入

字元,直到已經讀了num 個字元(預設為1)或是直到字元delim 被讀入(預設為eof).

其呼叫形式為cin.ignore(n,終止字元)

原型:istream &ignore( streamsize num=1, int delim=eof );

函式作用是跳過輸入流中n個字元,或在遇到指定的終止字元時提前結束(此時跳過包括終止字元在內的若干字元)。

3.getline函式

此函式是按行讀取,其語法為:cin.getline(

字元指標,字元個數n,結束符); 

功能是:一次讀取多個字元(包括空白字元),直到讀滿n-1個,或者遇到指定的結束符為止(預設的是以'\n'結束)。 

1 #include 2

using

namespace

std;34

intmain()514

//輸入:123456789123始終輸出123456789,最後一位預設\0

1

char str1[30],str2[30],str3[30

]; 2 cout < < "

請輸入你的姓名: ";

3 cin> >str1;

4 cout < < "

請輸入你的住址: ";

5cin.ignore();

6 cin.getline(str2,30

); 7 cout < < "

請輸入你的籍貫: ";

8cin.ignore();

9 cin.getline(str3,30

); 10

11 問題:我知道cin> >str1不能獲取帶有空格符的字串,而cin.getline()可以,但是為什麼在cin.getline()前面必須要有乙個cin.ignore()呢,為什麼要忽略乙個字元?

1213 我猜測是第乙個cin> > str1其實第乙個是cin.getline()也一樣,在我們敲回車的時候回車鍵的編碼也被獲取放到了cin當中,只是沒有放到字串中,而cin.getline()的預設的第三個引數(定界符)也是 '

\n '(對不對?),所以第二個cin.getline()直接就停了,不知道這種理解對不對,

它還可以這樣用: 

cin.ignore();  

即不帶引數;此時

預設引數為1.

呼叫ignore函式時需要注意乙個問題

當呼叫cin.ignore(10)時候,那麼如果在緩衝區中字元數不足10的時候,你的程式將暫停,直到你輸入到緩衝區的字元數達到了10,這條語句才執行結束,之後的語句才能執行。

4.c++清空緩衝區

cout.tie(&cout);

cout<

5.iostream標頭檔案

成員函式put()

輸出類ostream的成員函式put()用於輸出乙個字元,其格式是:

ostream& 《類物件》.put (char ch);

其中,引數ch用於儲存需要輸出的字元,最常用的ostream類物件是cout。例如:

cout.put('x');   // 顯示輸出字母x

由於該函式的返回型別為ostream類物件的引用,所以它可以被串聯使用,例如:

cout.put('g').put('o') .put('o') .put('d');  // 顯示輸出good

成員函式write()

輸出類ostream的成員函式write()用於輸出乙個指定長度的字串,其格式是:ostream& 《類物件》.write (const char *str, int length);

其中,引數str用於儲存需要輸出的字串,length用於指定字串中希望被輸出的字元的個數,當length等於strlen(str)時,輸出整個字元。

和函式put()一樣,在函式write()中最常用的的ostream類物件是cout。該函式的返回型別也是ostream類物件的引用,所以也可以被串聯使用。

成員函式get()    

輸入類istream的成員函式get()可以讀入乙個字元或者乙個字串,它不會忽略空格、製表符、換行符和回車,而是將它們也當作字元一併讀入。

它有三種原型:

int get();        // ①

istream& get(char& ch);      // ②

istream& get(char *str, int  length, char delimiter = '\n');  // ③

原型③是在引數的控制下讀入若干個字元,結束讀入操作的條件有三種:

(1)引數length,

表示讀入字元的數量不得多於length-1個;  

(2)引數delimiter,預設值是換行符「\n」,用於指定乙個特定的字元,當遇到該字元時就停止讀入操作。    

(3)當遇到檔案結束符eof時。

成員函式getline() 

輸入類istream的成員函式getline()的原型如下:

istream& getline(char *str, int length, char delimiter = '\n');    

它和函式get()的功能基本相同,用於讀取一串字元,直到讀入字元的個數大於length-1,或者遇到檔案的結束符eof,或者遇到delimiter。

但是,函式getline()要比函式get()好用得多,因為它能夠自動丟棄delimiter,而不會將它留在istream中作為下乙個輸入的字元。

成員函式read()    

輸入類istream的成員函式read()的功能是從輸入流中讀取指定數量的字元,其函式原型如下:                

istream& read(char * str, int length);  

其中,引數str用於存放讀入的字元,length為指定讀入的字元的數量。

輸入輸出那些事

1.如果不加cin.ignore 這行,s2將不會被輸入。原因是緩衝區每次結尾的時候還有 n,而getline 一開始讀的時候認為已經結束,就返回空行。1 include 2 include 3using namespace std 4int main 5 2.ignore函式 功能 函式用於輸入流...

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

uva oj java輸入輸出

真難的題目 狗屁演演算法 測資很機車 測驗結果 x.xx0 ms 測驗日期 200y mm dd author raymond wu 小璋丸 publicclassmain 載入單字的字元 while bytedata 1 else bytedata system.in.read catch exc...