2017-08-31 22 views
-1

私はなぜwhileループでcin.get()を使用しなければならないのか分かりません。 whileループの前にcin.get()を使用すると、cin.get()と同じことがwhileループ中に実行されます。スペースを考慮しながら入力した文字列を読み込みます。しかし、明らかにこのプログラムでは、すべてのテキストをベクトルにプッシュしようとしています。私がcin.get(next)をwhileループから除外し、line.push_back(next)しか持っていなかった場合、プログラムはエラーを返し、クラッシュします。whileループでcin.get()を使用する目的は何ですか?

なぜこれを行うのか説明してください。ありがとうございました

//Demonstration of the generic find function 
#include <vector> 
#include <algorithm> 
#include <iostream> 

using namespace std; 

int main() 
{ 
vector<char> line; 
cout << "Enter a line of text: \n"; 
char next; 
cin.get(next); 
while(next != '\n') 
{ 
    line.push_back(next); 
    cin.get(next); 
} 
return 0; 
} 
+3

['std :: basic_istream :: get'](http://en.cppreference.com/w/cpp/io/basic_istream/get)について読んで始めてください。プログラムが何をしているのか理解できない場合、プログラムが何をするのか理解できません。関連するコードにはバグがあります。偶然にストリームがエラー状態になると、決して来ない改行を探す無限にループします。 – WhozCraig

+1

これは入力を取得します。混乱がどこから来ているかわからないデバッガでコードを実行して、実際に何が実行されているかを確認する必要があります。 – NathanOliver

+0

ループを何度も実行するには、ループで使用します。ループからその行を削除した場合、ループしているすべての行は、同じ文字を繰り返してベクトルに何度も繰り返していきます。 whileループの終了条件は、入力された場合は決して来ないことに注意してください。 –

答えて

0

ここではあなたを助けるための小さなガイドです。最初は木々の森を見るのが難しい場合もあります。

char next; 

次のchar型の名前の変数を定義し、次の今は意味を持たない値があるので、let'sは1を取得します。 while文の条件のために必要です。

cin.get(next); 

我々はまだ我々が知っている唯一のことは、それが等しいdoesn'tということですnextで有意義な何もしませんでした次の等号までの周りにループをします「\ n」の

while(next != '\n') 
{ 

「\ n」のように私たちは本当にそれで何かをしなければなりません。

私たちのベクターにプッシュします。

line.push_back(next); 

素晴らしい。これまでに完了しました。いくつかの理由から、私たちは次の新しい価値を必要としています。一方では、私たちが次に変化しなければ、ループの状態が新しいものを得ることができないので、我々は永遠に(または少なくとも長くは)ループするでしょう。一方、我々はベクトル、私たちはしないでください?

そうです、それthat's

} 

をテストするための

cin.get(next); 

とバック私たちのループの先頭に次の次を取得することができます。

関連する問題