解析C++中get()和getline()的區別(二)
接上一篇,解析C++中get()和getline()的區別(一)
用getline()讀取輸入行
當程序使用cin輸入時,cin用空白符和行結束符將各個值分開。根據所需輸入的值,如需讀取一整行文本并且分開不同的域,則要使用getline成員函數
- getline(char*line,int size,char ='"n')
第二個參數是本次讀取的最大字符個數,第三個參數是分隔字符,作為讀取一行結束的標志。
下面的函數從鍵盤讀取一行文本
- #include <iostream>
- using namespace std;
- int main()
- {
- char str[128];
- cin.getline(str,sizeof(str));
- cout <<"you typed :" <<str<<endl;
- }
- #include <iostream>
- using namespace std;
- int main()
- {
- char str[128];
- cout<<"please input text and enter"<<endl;
- cin.getline(str,sizeof(str),'X');
- cout <<"you typed first line:" <<str<<endl;
- cin.getline(str,sizeof(str));
- cout <<"sencond line :"<<str<<endl;
- }
在鍵入X之前,可以按一次到多次回車鍵,而并不結束第一個cin.getline()的輸入 。 第一個cin.getline()的輸入操作將以鍵入X后的第一個回車結束。
cin.getline() 與 cin>>str 的一個不同是,前者輸入一行,行中可以包含空格,后者卻以空格或回車作為字串結束,不包含空格。
用get()讀取一個字符
每次獲取一個字符:char istream:[img]editor/images/smilies/default/24.gif[/img]
- //get.cpp
- #include <iostream>
- using namespace std;
- int main()
- {
- char letter;
- while(!cin.eof())
- {
- letter=cin.get();
- letter=toupper(letter);
- if (letter=='Y')
- {
- cout <<" "nY have been met "n";
- break;
- }
- cout <<letter;
- }
- }
使用流成員函數的輸入操作不只限于鍵盤,上例程序可從重定向輸入中讀取。
$ ./get < get.cpp
letter =cin.get();與cin>>letter 都是從輸入流中取一個字符,但卻有區別,默認情況下,cin>>letter將跳過任何在文件中發現的任何空白字符(空白字符指空格, tab,backspace,回車) .而cin.get不跳過空白字符。
用get()輸入一系列字符
- istream&istream::get(char*,int n,char delim='"n');
- istream fin("abc.txt");
- char buffer[80];
- fin>>buffer; //不能保證輸入字符個數在80以內。
- 可以改寫為
- istream fin("abc.txt");
- char buffer[80];
- fin.get(buffer,80); //保證輸入字符個數在80以內
getline()與get()第二種形式相同,唯一的例外是getline()從輸入流中輸入一系列字符時包括分隔符,而get()不包括分隔符。
put成員函數,依次輸出字符。
- #include <iostream>
- using namespace std;
- int main()
- {
- char letter;
- for (letter='A'; letter<='Z';letter++)
- cout.put(letter);
- }
cout<<letter; 與cout.put(letter)的區別是:前者顯示以數據類型表示的形式,后者以字符方式顯示。若letter是char型,兩者一樣。若 letter是int型,則cout<<letter顯示數字而不是字符了。
- #include <iostream>
- #include <fstream>
- using namespace std;
- int main()
- {
- ifstream in("put.cpp");
- if (in.fail())
- {
- cerr<<"Error opening the file"n";
- }
- while (!in.eof( ) )
- {
- cout.put(in.get() );
- }
- }
注意get()這種形勢它讀取了空白符(含回車符),不跳過任何的字符。與get(char * ,int n ,delim='"n')這種行式不同,他不包括分隔符delim.
- cin<<的結束符有enter space tab
- cin.get()的結束符只有enter,但會把enter放入隊列等待
- cin.getline()的結束符也只有enter,但不會把enter放入隊列
如果用cin>>…做過輸入,在使用cin.getline之前,需要處理一下。處理的方法很多,你可以在cin>>…的輸入語句后加一個語句cin.get();。
希望通過以上內容的介紹,能夠給你帶來幫助。