getline()

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
  

関連項目

list


  


C++目次 inserted by FC2 system