si / format autre à l'intérieur de la boucle while
-
25-09-2019 - |
Question
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’
Après que l'utilisateur entre dans le premier nom, je voudrais donner la possibilité d'entrer dans un deuxième nom. Si « N » juste passez directement à l'emplacement, si « Y » aller à Nom2, puis à la ville.
La solution
Vous devez joindre les déclarations entre le if
et le else
entre crochets {
... }
.
Autres conseils
Vous devez ajouter des accolades ici:
if (additional == "Y")
cout << "Additional Name: ";
getline(cin, Name2);
else
cout << "Location: ";
getline(cin, Location);
Essayez:
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);
Je soupçonne que vous voulez toujours les lignes suivantes (obtention de l'emplacement) de se produire, dans ce cas, pas d'autre est nécessaire.
Vous devez joindre le corps de if
accolades pour se débarrasser de l'erreur. Par le regard de celui-ci, vous devez également joindre le corps de else
accolades:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
} else {
cout << "Location: ";
getline(cin, Location);
}
Vous ne pouvez jeter les accolades ({
et }
) autour de blocs lorsque le bloc contient exactement une instruction (quelque chose se termine par un point-virgule (;
)) ou d'une autre déclaration d'un bloc (if
, for
, while
, etc).
Par exemple, vous pouvez faire ceci:
while (true)
if (foo) {
printf("Hello, ");
printf("world\n");
}
ou même
while (true)
if (foo)
for (i = 0; i < 10; i++) {
printf("Hello, ");
printf("World!\n");
}
Mais dans votre code, vous devez utiliser des accolades depuis votre relevé de if
contient deux déclarations avant la déclaration de else
. Par conséquent, la fin de la déclaration if
après la ligne cout
.
Le résultat final devrait ressembler donc quelque chose comme ceci:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
}
else {
cout << "Location: ";
getline(cin, Location);
}