2016-07-27 8 views
-6

ENDのbool値を使用してループの実行を停止する際に問題が発生しました(下記のコード)。プログラムの残りの部分は動作しますが、タイプを終了するとループが停止するようには見えません。助言がありますか?bool sentinel値を使ってC++でwhileループを終了するにはどうすればよいですか?

bool END = false; 
while (!END) 
{ 
    cout << "Please enter a song or END to terminate: "; 
    getline(cin, track); 

    results = binarySearch(tracks, numTracks, track); 

    if (results == -1) 
     cout << track << " is not on the set list.\n"; 
    else if (results != -1) 
    { 
     cout << track << " is on the set list.\n"; 
    } 
} 
+5

なぜループが停止すると思われますか? ENDは常にfalseです。 – Ian

+0

whileループ内で 'END'が決して変更されない – DimChtz

+0

入力が' 'END ''であるかどうかを確認する方法がわからないということですか?他の人がその変数の値を決して変更しないことを指摘したので、もちろんループは終了しません。 – Borgleader

答えて

3
if (track == "END") 
    break;// or whatever you want to happen, e.g. END = true 

あなたは、ユーザーの入力に対してチェックする必要があります。

+2

...そして、ループは単純に 'while(true){' ...このループから 'break 'した後続のプログラマーへの即時の手がかりになります。 –

3

実際、bool変数を条件としてwhileループを使用する必要はありません。ループを次のように書き直すことができます。

while (true) 
{ 
    cout << "Please enter a song or END to terminate: "; 

    if (!getline(cin, track) || track == "END") break; 

    results = binarySearch(tracks, numTracks, track); 

    if (results == -1) 
    { 
     cout << track << " is not on the set list.\n"; 
    } 
    else 
    { 
     cout << track << " is on the set list.\n"; 
    } 
} 

if-elseステートメントのelse部分にも注意してください。

関連する問題