ベストアンサー
cin.getline()を使用すると、には空白もあります。その構文は次のとおりです。cin.getline(文字列の名前、文字列のサイズ);次の例を考えてみましょう。strとstrrの両方にHelloWorldを入力するとします。 #include
int main()
{
char str[100]", strr[100];
cout<<"Enter the strings : ";
cin.getline( str, 100 ); //enter Hello World
cin>>strr; //enter Hello Word.
cout<
cout<
return 0;
}
これが基本的な違いです。 cinは文字列の空白を考慮しませんが、cin.getlineは考慮します。
回答
これは、学生がgetline()を使用するときに一般的に直面する最も一般的な問題の1つです。関数。
プログラムを実行するときに、Delhiと入力し、Enterキーを押します。このEnterキーは、改行文字に他なりません。タブスペースや「\ n」などの空白文字は、通常、cinを使用して値を入力するときに無視(スキップ)されます。
通常、入力が入力された後、余分な文字が入力ストリームに残ります。おそらく完了しました。次に、それらは意図されていなくても、次の入力操作に渡されます。多くの場合、改行文字が残りますが、他の文字も残る場合があります。
プログラムでは、この改行文字はgetline()関数への入力として機能します。この関数は入力を取得したため、値を入力することはできません。この文字を削除する必要があります。そうすれば、プログラムは完全に正常に機能します。
これらの無関係な文字を削除するには、 ignore(MAX、DELIM) istreamクラスのメンバー関数が使用されます。指定された区切り文字を含め、最大MAX文字を読み取って破棄します。 getline()関数を呼び出す前に、この関数を次のように使用します:
cin.ignore(1、 "\ n");
余分な文字には空白も含まれる場合があるため(たとえば、 Delhi と入力した後、スペースを入れてEnterキーを押します)、 1の代わりに10を使用する方が安全です。
cin.ignore(10、 "\ n");
istreamクラスについて心配する必要はありません。 IOSTREAMヘッダーファイルで宣言されています。さらに、getline()は、istreamクラス自体のメンバー関数でもあります。