web-dev-qa-db-ja.com

cin.get()とcin.getline()の違い

私はプログラミングに不慣れで、C++のget()およびgetline()関数についていくつか質問があります。

2つの機能についての私の理解:

getline()関数は行全体を読み取り、Enterキーによって送信された改行文字を使用して入力の終了をマークします。 get()関数はgetline()によく似ていますが、改行文字を読み取って破棄するのではなく、get()はその文字を入力キューに残します。

私が読んでいる本(C++ Primer Plus)は、get()ではなくgetline()を使用することを提案しています。私の混乱は、_'\n'_で行を終了することを確認するため、getline()よりもget()安全ではないということです。一方、get()は入力キュー内の文字をハングさせるだけなので、問題が発生する可能性がありますか?

6
Yu Zhou

同等の数の長所と短所があり、-本質的に-すべてはあなたが読んでいるものに依存します:get()は区切り文字をキューに残し、次の入力の一部と見なすことができます。 getline()はそれを破棄するため、次の入力はその直後になります。

コンソール入力からの改行文字について話している場合、それを破棄することは完全に理にかなっていますが、ファイルからの入力を考慮する場合は、次のフィールドの先頭を「区切り文字」として使用できます。

「良い」または「安全」なことは、何をしているかによって異なります。

13

get()は、ストリームからcharごとに抽出してその値(整数にキャスト)を返しますが、getline()は、ファイルから1行ずつ取得するために使用されます。通常、getlineは、フラットファイル(数千行)があり、特定の区切り文字を使用して出力(行ごと)を抽出し、それに対して何らかの操作を実行するアプリケーションで区切り文字を除外するために使用されます。

6