Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

307
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!