私はプログラミングに不慣れで、C++のget()
およびgetline()
関数についていくつか質問があります。
2つの機能についての私の理解:
getline()
関数は行全体を読み取り、Enterキーによって送信された改行文字を使用して入力の終了をマークします。 get()
関数はgetline()
によく似ていますが、改行文字を読み取って破棄するのではなく、get()
はその文字を入力キューに残します。
私が読んでいる本(C++ Primer Plus)は、get()
ではなくgetline()
を使用することを提案しています。私の混乱は、_'\n'
_で行を終了することを確認するため、getline()
よりもget()
安全ではないということです。一方、get()
は入力キュー内の文字をハングさせるだけなので、問題が発生する可能性がありますか?
同等の数の長所と短所があり、-本質的に-すべてはあなたが読んでいるものに依存します:get()
は区切り文字をキューに残し、次の入力の一部と見なすことができます。 getline()
はそれを破棄するため、次の入力はその直後になります。
コンソール入力からの改行文字について話している場合、それを破棄することは完全に理にかなっていますが、ファイルからの入力を考慮する場合は、次のフィールドの先頭を「区切り文字」として使用できます。
「良い」または「安全」なことは、何をしているかによって異なります。
get()
は、ストリームからcharごとに抽出してその値(整数にキャスト)を返しますが、getline()
は、ファイルから1行ずつ取得するために使用されます。通常、getlineは、フラットファイル(数千行)があり、特定の区切り文字を使用して出力(行ごと)を抽出し、それに対して何らかの操作を実行するアプリケーションで区切り文字を除外するために使用されます。