Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

305
Vistas
Identificador no declarado en bucle do while, C
#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?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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);
over 4 years ago · Santiago Trujillo Denunciar

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 )

over 4 years ago · Santiago Trujillo Denunciar

0

EDITAR: Me han señalado que leí mal la condición de terminación de su ciclo. (Lo siento, insomnio.)

Posible respuesta 1

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:

  1. obtener un valor
  2. Si el valor es cero, termina el bucle.
  3. Si no, haz cosas con el valor

Por lo tanto:

 while (true) { int height = get_int("Height: "); if (height <= 0) break; // invalid height terminates loop // use height here // }

Posible respuesta 2

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.

Cosas útiles para las personas de C++ que encuentran esto solo por título

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.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda