getline (C++)

[機能]

  istream クラスのメンバー関数であり,ストリームから文字列を読み込みます.文字の読込は,区切り文字(デフォルトは,改行文字: '\n' )が現れるか,ファイルの終端に達するか,または,読み込んだ文字数が (指定された文字数 - 1 ) になるまで行われます.文字列は NULL 文字が付加されて指定した配列に格納されます.区切り文字が見つかると,その区切り文字を取り出しますが,格納はしません.区切り文字を改行文字とすれば,C における fgets 関数と基本的に同じですが,fgets 関数では,区切り文字も配列に格納します.なお,同じ istream クラスのメンバー関数である get 関数においても同様の処理を行うことができますが,get 関数では区切り文字の取り出しも,また,格納も行いません.

[形式]
	istream& getline( char* pch, int nCount, char delim = '\n');
	istream& getline( unsigned char* puch, int nCount, char delim = '\n');
	istream& getline( signed char* psch, int nCount, char delim = '\n');
		pch,puch,psch : 文字配列へのポインタ
		nCount : 文字列の終わりを示す NULL 文字を含む最大格納文字数
		delim : 区切り文字 (デフォルトは改行文字)
		
[使用例]

  1. getline,get,および,fgets の比較
    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    	char str[81];
    /*
    		 getline と get
    */
    	ifstream in1("data");
    					// 1行目の入力(改行を除く)
    	in1.get(str, 20);
    	cout << str << endl;
    					// 1行目の改行文字のため何も入力しない
    	in1.get(str, 20);
    	cout << str << endl;
    					// 1行目の改行を入力
    	in1.getline(str, 20);
    	cout << str << endl;
    					// 2行目を入力
    	in1.getline(str, 20);
    	cout << str << endl;
    
    	in1.close();
    /*
    		 fgets
    */
    	FILE *in2;
    	in2 = fopen("data", "r");
    					// 1行目と2行目を入力
    					// 改行が文字列に入っているためendlは必要ない
    	fgets(str, 20, in2);
    	cout << str;
    	fgets(str, 20, in2);
    	cout << str;
    
    	fclose(in2);
    
    	return 0;
    }
    
    (出力)たとえば,ファイル「data」に
    			First test data
    			Second test data
        のようなデータが入っていた場合は,以下のように出力される.
    			First test data
    
    
    			Second test data
    			First test data
    			Second test data
    			
[参照]

get, getc, getchar, putc, putchar, puts, fgetc, fgets, fputc, fputs, getw, putw

ホームページ 目次 演習解答例目次 付録目次 索引