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.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

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引