se / altro formato all'interno while
-
25-09-2019 - |
Domanda
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’
Dopo che l'utente inserisce il nome, vorrei dare la possibilità di inserire un secondo nome. Se "N", salti giù per posizione, se "Y" andare a Nome2 e poi a Posizione.
Soluzione
È necessario racchiudere le istruzioni tra il if
e else
tra parentesi {
... }
.
Altri suggerimenti
È necessario aggiungere le parentesi graffe qui:
if (additional == "Y")
cout << "Additional Name: ";
getline(cin, Name2);
else
cout << "Location: ";
getline(cin, Location);
Prova:
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);
Ho il sospetto che si desidera sempre le seguenti righe (il recupero della posizione) a verificarsi, quindi in questo caso, nessun altro è necessario.
È necessario racchiudere il corpo di if
tra parentesi graffe per sbarazzarsi dell'errore. Con gli sguardi di esso anche è necessario racchiudere il corpo else
tra parentesi graffe:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
} else {
cout << "Location: ";
getline(cin, Location);
}
Puoi scartare solo le parentesi graffe ({
e }
) intorno blocchi quando il blocco contiene esattamente una dichiarazione (qualcosa che termina con un punto e virgola (;
)) o di un'altra dichiarazione con un blocco (if
, for
, while
, ecc).
Ad esempio, si può fare questo:
while (true)
if (foo) {
printf("Hello, ");
printf("world\n");
}
o anche
while (true)
if (foo)
for (i = 0; i < 10; i++) {
printf("Hello, ");
printf("World!\n");
}
Ma nel codice, è necessario utilizzare parentesi graffe in quanto la sua dichiarazione if
contiene due affermazioni prima della dichiarazione else
. Pertanto l'istruzione End if
dopo la linea cout
.
Il risultato finale dovrebbe così essere simile a questa:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
}
else {
cout << "Location: ";
getline(cin, Location);
}