2016-07-27 14 views
-6

Ich habe Probleme mit dem Bool-Wert von END, um die Schleife zu stoppen (Code unten). Der Rest des Programms funktioniert, aber ich kann nicht scheinen, die Schleife zu stoppen, wenn ich Ende tippe. Irgendwelche Vorschläge?Wie verwende ich einen Bool-Sentinel-Wert, um eine While-Schleife in C++ zu beenden?

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

Warum erwarten Sie, dass die Schleife stoppt? ENDE ist immer falsch. – Ian

+0

'END' ändert sich nie innerhalb der While-Schleife – DimChtz

+0

Meinst du nicht, wie man überprüft, ob die Eingabe' "END" 'ist? Weil andere darauf hinweisen, dass Sie den Wert dieser Variablen niemals ändern, wird die Schleife natürlich nie beendet. – Borgleader

Antwort

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

müssen Sie gegen den Benutzer Eingang überprüfen.

+2

... und dann kann die Schleife einfach 'while (true) {' ... ein sofortiger Hinweis für jeden nachfolgenden Programmierer sein, den wir nur aus dieser Schleife "ausbrechen". –

3

In der Tat ist es nicht notwendig, die while-Schleife mit einer bool-Variablen als Bedingung zu verwenden. Sie können Ihre Schleife die folgende Art und Weise

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"; 
    } 
} 

Achten Sie auch auf den sonsten Teil der if-else-Anweisung neu schreiben.