if / else-Format innerhalb von while-Schleife
-
25-09-2019 - |
Frage
while(true)
{
cout << "Name: ";
getline(cin, Name);
if(Name == "Stop")
break;
cout << "Additional Name - Y/N: ";
getline(cin, additional);
if (additional == "Y")
cout << "Additional Name: ";
getline(cin, Name2);
else
cout << "Location: ";
getline(cin, Location);
if(Location == "Stop")
break;
}
chief.cpp: In member function ‘void BookList::Fill()’:
chief.cpp:128: error: ‘else’ without a previous ‘if’
Nachdem der Benutzer die Vornamen eingibt, würde Ich mag die Möglichkeit geben, einen zweiten Namen einzugeben. Wenn „N“ nur überspringen Lage nach unten, wenn „Y“ zu Name2 gehen und dann weiter nach Lage.
Lösung
Sie haben die Anweisungen zwischen den if
und dem else
in Klammern umschließen {
... }
.
Andere Tipps
Sie müssen Klammern hier hinzufügen:
if (additional == "Y")
cout << "Additional Name: ";
getline(cin, Name2);
else
cout << "Location: ";
getline(cin, Location);
Versuchen Sie:
if (additional == "Y")
{
cout << "Additional Name: ";
getline(cin, Name2);
}
// You could have an else here, but that would make location only happen if "additional" was not "Y"
cout << "Location: ";
getline(cin, Location);
Ich vermute, dass Sie immer die folgenden Zeilen wollen (immer Standort) auftreten, so dass in diesem Fall ist kein anderes erforderlich ist.
Sie müssen den Körper von if
in Klammern umschließen die Beseitigung der Störung zu erhalten. Durch den Blicken von ihm auch die else
Körper in Klammern einschließen müssen:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
} else {
cout << "Location: ";
getline(cin, Location);
}
Sie können nur die Klammern ({
und }
) verwerfen um Blöcke, wenn der Block enthält genau eine Anweisung (etwas mit einem Semikolon enden (;
)) oder einer anderen Anweisung mit einem Block (if
, for
, while
, etc).
Zum Beispiel, Sie können dies tun:
while (true)
if (foo) {
printf("Hello, ");
printf("world\n");
}
oder auch
while (true)
if (foo)
for (i = 0; i < 10; i++) {
printf("Hello, ");
printf("World!\n");
}
Aber in Ihrem Code, müssen Sie verwenden Klammern, da Ihre if
Anweisung enthält zwei Aussagen vor der else
Aussage. Deshalb ist das if
Anweisung Ende nach der cout
Linie.
Das Endergebnis sollte so etwas wie folgt aussehen:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
}
else {
cout << "Location: ";
getline(cin, Location);
}