#include <stdio.h> #include <cs50.h> int main(void) { do { //ask for input with 1-8 int height = get_int("Height: "); } while (height > 0); }Y obtuve el código de error: uso de identificador no declarado "altura" (en la declaración while) Estoy completamente verde para programar y no tengo idea de cómo solucionar esto. ¿Alguien puede ayudar?
El alcance de la height variable es el cuerpo del bucle do .. while . La condición de este bucle está fuera del cuerpo, por lo tanto, la height no está dentro del alcance de la condición del bucle.
Mueva la definición de height fuera del bucle.
int height; do { //ask for input with 1-8 height = get_int("Height: "); } while (height > 0);La altura no es visible (ni existe) después de la riostra de cierre del bloque do body. Debe declararlo fuera del bucle. He marcado los puntos donde la height deja de existir en los comentarios a continuación:
int main(void) { do { //ask for input with 1-8 int height = get_int("Height: "); } // <- the scope and visibility of height ends here while (height > 0); // ... so it doesn't exist here. } la solución es declarar la height antes de la palabra clave do , como en:
int main(void) { int height; do { //ask for input with 1-8 height = get_int("Height: "); } while (height > 0); // now, height is visible here. } // <-- visibility and scope of height ends here. Otra cosa es que, si tu intención es pedir una altura y repetir la pregunta hasta height > 0 , entonces debes escribir while (height <= 0) en su lugar, (repites la pregunta mientras la respuesta no es correcta )
EDITAR: Me han señalado que leí mal la condición de terminación de su ciclo. (Lo siento, insomnio.)
Tal como lo leí, parece que desea hacer algo repetidamente con valores positivos de height y terminar cuando se proporciona un valor no válido.
Para que eso suceda, el pensamiento correcto sobre esto debería ser:
Por lo tanto:
while (true) { int height = get_int("Height: "); if (height <= 0) break; // invalid height terminates loop // use height here // }Si su deseo es solicitar repetidamente una altura hasta que el usuario le dé un valor válido para continuar, entonces la única respuesta es mover la declaración de valor fuera del ciclo, ya que cualquier cosa declarada local para el ciclo no se podrá usar fuera del bucle:
int height; do { height = get_int("Height: "); } while (height is not valid); // use height here //Esto es exactamente como lo explica Luis Colorado , porque estaba lo suficientemente despierto como para leer correctamente la condición de su bucle.
Como anteriormente había leído mal la solución para terminar si la height se convierte en cero (un semáforo común para los problemas de tarea que involucran números enteros), y debido a que las personas de C ++ también encontrarán esta respuesta, también proporcioné una solución de C ++ donde la condición y el cuerpo comparten la localidad de la siguiente manera :
En las versiones actuales de C++, puede integrar la variable en la condición de bucle:
while (int height = get_int("Height: ")) { // use height here // }Creo que esto es cierto para C ++ 11 o posterior, pero podría haberse introducido en C ++ 14, IDK y no me importa buscarlo. Debería estar usando nada menos que C++ 17 en estos días...
Esta solución solo funciona para variables que se pueden convertir a valores reales; en este caso, el ciclo termina cuando la height es cero.
En el caso particular de OP, esto no funcionará.
Ahora ve a votar por la respuesta del Sr. Colorado, porque explica mejor el problema de la localidad.