si / formato más dentro del bucle while
-
25-09-2019 - |
Pregunta
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’
Después de que el usuario introduce el nombre de pila, me gustaría dar la opción de introducir un segundo nombre. Si "N" sólo pasa a la ubicación, si "Y" ir a Nombre2 y luego a la ubicación.
Solución
Hay que incluir las declaraciones entre el if
y la else
entre paréntesis {
... }
.
Otros consejos
Es necesario añadir los apoyos aquí:
if (additional == "Y")
cout << "Additional Name: ";
getline(cin, Name2);
else
cout << "Location: ";
getline(cin, Location);
Trate:
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);
Sospecho que uno siempre quiere las siguientes líneas (al obtener la ubicación) que se produzca, por lo que en este caso, no se requiere otra cosa.
Se necesita para encerrar el cuerpo de if
en apoyos para deshacerse del error. Por el aspecto de que también hay que encerrar el cuerpo else
entre llaves:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
} else {
cout << "Location: ";
getline(cin, Location);
}
Sólo puede descartar los apoyos ({
y }
) en torno a los bloques cuando el bloque contiene exactamente un comunicado (algo que termina con un punto y coma (;
)) u otra declaración con un bloque (if
, for
, while
, etc).
Por ejemplo, se puede hacer esto:
while (true)
if (foo) {
printf("Hello, ");
printf("world\n");
}
o incluso
while (true)
if (foo)
for (i = 0; i < 10; i++) {
printf("Hello, ");
printf("World!\n");
}
Sin embargo, en su código, necesita apoyos uso desde su estado de if
contiene dos declaraciones antes de la declaración else
. Por lo tanto el final if
comunicado después de la línea cout
.
El resultado final por lo tanto debe ser algo como esto:
if (additional == "Y") {
cout << "Additional Name: ";
getline(cin, Name2);
}
else {
cout << "Location: ";
getline(cin, Location);
}