最近在看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 輸入原理簡述 程式的輸入都建有乙個緩衝區,即輸入緩衝區。每次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝...