getline()は入力ストリームから文字を取得します。読み込む文字数が指定されている場合は、最大でその文字数までがバッファに保存されます。 そうでなければ、EOF(End of File)に達するまで、あるいはデリミタ(区切り文字)delimまで読み込まれます。
書式は次の通りです。
#include <iostream>
basic_istream::getline();
basic_istream& getline(E *s, streamsize n);
basic_istream& getline(E *s, streamsize n, [E delim]);
istream& getline( char* pch, int n, char delim = '\n' );
istream& getline( unsigned char* puch, int n, char delim = '\n' );
istream& getline( signed char* psch, int n, char delim = '\n' );
istream_type& getline(char_type* s, streamsize n, char_type delim);
最初の書式はgetline(s, n, widen('\n'))を返します。
次の例は、end.が入力されるまで、リストに繰り返し名前を保存する例です。 この例では、関数GetNames()の中でgetline()で得た入力文字列を繰り返し入力して、入力文字列がend.であった場合、ループを抜けます。 その後、DispNames()では反復子を使ってリストの内容を出力します。
#include <iostream>
#include <string>
#include <list>
#define BUFF_LEN 512
std::list<std::string> namelist;
// end.が入力されるまで、繰り返し名前を入力する
int GetNames()
{
int n = 0;
char buff[BUFF_LEN];
while (1)
{
std::cout << "Name? >";
std::cin.getline(buff, BUFF_LEN);
if (std::string(buff).compare("end.") == 0)
break;
namelist.push_back(std::string(buff));
n++;
}
return n;
}
void DispNames()
{
std::list<std::string>::iterator it = namelist.begin();
for (; it != namelist.end(); it++)
{
std::cout << *it << std::endl;
}
}
int main(int argc, char* argv[])
{
GetNames();
DispNames();
return 0;
}
実行例を次に示します。
Name? >Kelly
Name? >Tommy
Name? >Wanko
Name? >end.
Kelly
Tommy
Wanko