1. 程式人生 > >C++getline()與get()用法

C++getline()與get()用法

用getline()讀取輸入行
當程式使用cin輸入時,cin用空白符和行結束符將各個值分開。根據所需輸入的值,如需讀取一整行文字並且分開不同的域,則要使用getline成員函式

getline(char*line,int size,char ='"n')
第二個引數是本次讀取的最大字元個數,第三個引數是分隔字元,作為讀取一行結束的標誌。
下面的函式從鍵盤讀取一行文字
#include<iostream>
using namespacestd;

int main()
{
char str[128];

cin.getline(str,sizeof(str));
cout <<"you typed :"
<<str<<endl;


}
#include<iostream>
using namespacestd;

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 namespacestd;

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 namespacestd;

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.