C 輸入方法總結

2021-08-23 14:01:58 字數 1887 閱讀 9321

最近在看c++ primer plus時經常會混淆各種輸入方法,例如cin,cin.get(),cin.getline(),getline()等,所以想做乙個總結

程式的輸入都有乙個緩衝區,當乙個程式結束輸入時,會將輸入的資料都放到輸入緩衝區,cin的函式都是從輸入緩衝區取資料的,所以當輸入緩衝區有殘留資料時,cin會從輸入緩衝區拿資料而不會請求輸入

char str[10];

cin >> str;

cout << str << endl;

cin >> str;

cout << str << endl;

第一次輸入時,用空格隔開兩個字串,程式就不會請求第二次輸入,除非在第二次輸入之前用cin.sync()函式清空輸入緩衝區

char str[10];

cin >> str;

cout << str << endl;

cin.sync();

cin >> str;

cout << str << endl;

cin可以讀取很多變數型別,比如int,char,char *,string等,cin的輸入操作在遇到(space,enter,tab)時就會結束,而且讀取字串時不會將結束符讀取進來

該函式有以下幾種用法

1,讀取乙個字元,如果該字元是有效的,該函式會返回該字元;如果該字元無效,則返回乙個除字元以外的值並且設定乙個錯誤標記(failbit)和到達檔案尾標誌(eofbit),failbit和eofbit屬於io狀態標記位,狀態標記位常量有以下幾個,其實這四個標誌常量就是取其對應標誌位的掩碼,badbit為001,failbit為100,eofbit為010,goodbit為000。該用法的返回值是被讀取的字元或者eof()即乙個除字元以外的值

常量含義

failbit標記位的值

eofbit標記位的值

badbit標記位的值

轉換成十進位制

failbit

io流出現非致命錯誤,可以挽回10

04badbit

io流出現致命錯誤,不能挽回00

11goodbit

io完全正常00

00eofbit

已經到達檔案尾01

0

char ch;

ch=cin.get();

2,讀取乙個字元,如果該字元是有效的,將其儲存在傳遞過來的字元中(引數),相當於該字元的值被修改了;如果該字元無效,傳遞過來的字元的值不會被更改,同時設定eofbit和failbit,要注意的是這個函式不會對signed char和unsigned char進行過載,以下**會出錯。該用法的返回值是this指標

3,cin.get(str,count,結束標誌),最多讀取count-1個字元,將它們儲存在str中,直到遇到結束標誌。該方法返回乙個this指標,它將會一直讀取,直到遇到以下幾種情況

cin.getline()會讀取字元直到行末或者碰到特定的字元,該函式的返回值是this指標,cin.getline(str,count,結束標誌)

它會保持讀取,直到遇到以下任何一種情況,以下幾種情況是按順序進行檢測的

1,到達檔案末尾,同時setstate(eofbit)會被呼叫

2,下乙個要讀取的字元為結束標誌,作為結束標誌的字元會被讀取,在gcount()中會將該字元計入讀取的字元數,但是它不會被儲存在str之中

3,已經讀取了count-1個字元,同時會呼叫setstate(failbit)

如果沒有字元被讀取,setstate(failbit);在任何count>0的情況下,str中都會被新增上乙個空字元

各種輸入方法總結(C )

檢視部落格 c 基礎 各種輸入方法總結,cin cin.get cin.getline getline gets getchar 檢視部落格 c 中cin.get cin.getline getchar getch 的區別 檢視部落格 cin.get 與cin.peek 的使用 下面是我整理過後的做...

C 輸入函式 總結

cin 的結束符有enter space tab cin.get 的結束符只有enter,但會把enter放入佇列等待 cin.getline 的結束符也只有enter,但不會把enter放入佇列 1.cin.getline cin的getline需要這樣用 cin.getline s,50,n 或...

C 輸入函式總結

在c 中,各種輸入方法還是不少的,而且各有所異,本文做一點簡要總結,主要涉及如下內容 cin cin.get cin.getline getline gets getchar 輸入原理簡述 程式的輸入都建有乙個緩衝區,即輸入緩衝區。每次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝...