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.

È stato utile?

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top