Compartir a través de


Creación de una calculadora de consola en C++

El punto de partida habitual para un programador de C++ es una aplicación "Hello, world!" que se ejecuta en la línea de comandos. Empieza con eso en este artículo y, a continuación, pasa a algo más difícil: una aplicación de calculadora.

Prerrequisitos

  • Visual Studio con la carga de trabajo Desarrollo de escritorio con C++ instalada y ejecutándose en el equipo. Para instalarlo, consulte Instalación de la compatibilidad con C++ en Visual Studio.
  • En este tutorial se muestra una característica denominada editar y continuar, lo que le permite realizar cambios en el código mientras se ejecuta la aplicación. Para habilitar la edición y continuar, en el menú principal, seleccione Herramientas>Opciones>depuración>General y asegúrese de que Requerir que los archivos de origen coincidan exactamente con la versión original está activada.

Creación del proyecto de aplicación

Visual Studio usa proyectos para organizar el código de una aplicación y soluciones para organizar uno o varios proyectos. Un proyecto contiene todas las opciones, configuraciones y reglas que se usan para compilar una aplicación. También administra la relación entre todos los archivos del proyecto y los archivos externos. Para crear la aplicación, en primer lugar, cree un nuevo proyecto y una solución.

  1. Aparecerá el cuadro de diálogo Inicio de Visual Studio. Seleccione Crear un nuevo proyecto para empezar.

    Captura de pantalla del cuadro de diálogo que aparece cuando se inicia Visual Studio 2022.

    El cuadro de diálogo tiene opciones para clonar un repositorio, abrir un proyecto o una solución, abrir una carpeta local y crear un nuevo proyecto".

  2. En el cuadro de diálogo Crear un nuevo proyecto , establezca la lista desplegable lenguaje en C++, establezca la lista desplegable plataforma en Windows, seleccione Aplicación de consola en la lista de tipos de proyecto y, a continuación, seleccione Siguiente.

    Captura de pantalla del cuadro de diálogo Crear un nuevo proyecto de Visual Studio.

    La lista desplegable del lenguaje se establece en C++, la lista desplegable de la plataforma se establece en Windows y los tipos de proyecto como Proyecto vacío, Aplicación de consola, Proyecto de CMake, Asistente para escritorio de Windows, etc., aparecen en la lista de tipos de proyecto".

    Importante

    Asegúrese de seleccionar la versión de C++ de la plantilla Aplicación de consola . Tiene las etiquetas de C++, Windows y Consola , y el icono tiene "++" en la esquina.

  3. En el cuadro de diálogo Configurar el nuevo proyecto , seleccione el cuadro de texto Nombre del proyecto, asigne al nuevo proyecto el nombre CalculatorTutorial y, a continuación, seleccione Crear.

    Captura de pantalla del cuadro de diálogo Configurar el nuevo proyecto de Visual Studio. Tiene campos para el nombre del proyecto, la ubicación del proyecto y el nombre de la solución.

    Se crea una aplicación de consola de Windows "Hello World" vacía. Las aplicaciones de consola usan una ventana de consola de Windows para mostrar la salida y aceptar la entrada del usuario. En Visual Studio, se abre una ventana del editor y se muestra el código generado:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

Comprobación de que la nueva aplicación se compila y ejecuta

La plantilla de una nueva aplicación de consola de Windows crea una sencilla aplicación "Hola mundo" de C++. En este punto, puede ver cómo Visual Studio compila y ejecuta las aplicaciones que crea directamente desde el IDE.

  1. Para compilar el proyecto, seleccione Compilar solución en el menú Compilar . La ventana Salida muestra los resultados del proceso de compilación.

    Captura de pantalla de la ventana Salida de Visual Studio. Muestra un mensaje que indica que la compilación se realizó correctamente.

  2. Para ejecutar el código, en la barra de menús, seleccione Depurar>Inicio sin depurar (Ctrl+F5).

    Captura de pantalla de la consola de depuración de Visual Studio que muestra la salida de la aplicación: Hola mundo.

    Se abre una ventana de consola y la aplicación se ejecuta dentro de ella.

    Al iniciar una aplicación de consola en Visual Studio, ejecuta el código y, a continuación, imprime "Presione cualquier tecla para cerrar esta ventana . . ." para darle la oportunidad de ver la salida.

    ¡Felicidades! Ha creado su primera aplicación de consola "Hola mundo!" en Visual Studio.

  3. Presione una tecla para descartar la ventana de la consola y volver a Visual Studio.

Ahora tiene las herramientas para compilar y ejecutar la aplicación después de cada cambio, para comprobar que el código sigue funcionando según lo previsto. Más adelante, le mostramos cómo depurarlo si no lo hace.

Edición del código

Ahora vamos a modificar el código de esta plantilla para que sea una aplicación de calculadora.

  1. Reemplace el contenido del CalculatorTutorial.cpp archivo por el código siguiente para que coincida con este ejemplo:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
            << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    Descripción del código:

    • La #include instrucción incluye código en otros archivos. A veces, puede ver un nombre de archivo rodeado de corchetes angulares como <iostream>. Los corchetes angulares indican al compilador que busque primero el iostream archivo de encabezado en los directorios del sistema estándar y, si no se encuentra, para buscar en directorios específicos del proyecto. Otras veces, es posible que vea un nombre de archivo entre comillas como "someHeader.h". Las comillas indican al compilador que omita la búsqueda en los directorios del sistema estándar y, en su lugar, solo busque en directorios específicos del proyecto.
    • using namespace std; indica al compilador que espere que el código de la biblioteca estándar de C++ se use en este archivo. Sin esta línea, cada palabra clave de la biblioteca tendría que ir precedida std:: de para indicar su ámbito. Por ejemplo, sin esa línea, cada referencia a cout se escribiría como std::cout. La using instrucción se agrega para facilitar el acceso al código en otro espacio de nombres.
    • La cout palabra clave se usa para imprimir en la salida estándar en C++. El << operador indica al compilador que envíe lo que sea a la derecha de ella a la salida estándar.
    • La endl palabra clave es como la tecla Entrar; finaliza la línea y mueve el cursor a la línea siguiente. Se recomienda colocar un \n elemento dentro de la cadena (contenido por "") para hacer lo mismo porque endl siempre vacía el búfer que puede afectar al rendimiento del programa. Pero como se trata de una aplicación muy pequeña, endl se usa en su lugar.
    • Todas las instrucciones de C++ deben terminar con punto y coma y todas las aplicaciones de C++ deben contener una main() función. Esta función es lo que el programa se ejecuta al principio. Todo el código debe ser accesible desde main() para poder usarse.
  2. Para guardar el archivo, presione Ctrl+S o seleccione el icono de disco de disquete en la barra de herramientas de la barra de menús.

  3. Para ejecutar la aplicación, presione Ctrl+F5 o vaya al menú Depurar y seleccione Iniciar sin depurar. Debería ver una ventana de consola que tiene este aspecto.

  4. Cierre la ventana de la consola cuando haya terminado.

Agregar código para realizar algunas matemáticas

Una clase es como un plano técnico de un objeto que hace algo. En este caso, definimos una clase de calculadora para que contenga la lógica matemática.

Agregar una clase Calculator

  1. Vaya al menú Proyecto y seleccione Agregar clase. En el cuadro de edición Nombre de clase, escriba Calculadora. Selecciona Aceptar.

    Captura de pantalla del cuadro de diálogo Agregar clase de Visual Studio.

    El campo nombre de clase contiene la calculadora de texto. El campo de archivo .h contiene Calculator.h. El campo archivo .cpp contiene Calculator.cpp. El campo de clase base está vacío. Las opciones de inline y Managed están desactivadas.

    Se agregan dos nuevos archivos al proyecto. Para guardar todos los archivos modificados a la vez, presione Ctrl+Mayús+S. Es un método abreviado de teclado para Guardar>todo. También hay un botón de barra de herramientas para Guardar todo, un icono de dos discos de disquete, que se encuentra junto al botón Guardar . En general, se recomienda hacer Guardar todo con frecuencia, por lo que no se pierde el guardado de ningún cambio.

    El Asistente para agregar clase crea .h archivos y .cpp que tienen el mismo nombre que la clase . Puede ver una lista completa de los archivos del proyecto en la ventana Explorador de soluciones, visible en el lado del IDE. Si la ventana no está visible, ábrala desde la barra de menús a través de Ver>Explorador de soluciones.

    Captura de pantalla de la ventana Explorador de soluciones de Visual Studio.

    El proyecto del tutorial de calculadora tiene un nodo de archivos de encabezado que contiene Calculator.h. Un nodo Archivos de origen contiene Calculator.cpp y CalculatorTutorial.cpp. Los nodos de referencias, dependencias externas y archivos de recursos son visibles pero cerrados.

    Para abrir un archivo, haga doble clic en él en la ventana Explorador de soluciones. Haga doble clic Calculator.h para abrirlo.

  2. Reemplace el contenido de Calculator.h por el código siguiente para que el archivo tenga el siguiente aspecto:

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    Descripción del código

    • Este código declara una nueva función denominada Calculate, que controla las operaciones matemáticas para suma, resta, multiplicación y división.
    • El código de C++ se organiza en archivos de encabezado (.h) y archivos de origen (.cpp). Algunos otros compiladores admiten otras extensiones de archivo, pero estas son las principales que se deben conocer. Las funciones y las variables normalmente se declaran, es decir, se les da un nombre y un tipo, en archivos de encabezado, e implementan, o se les da una definición, en los archivos de origen. Para acceder al código definido en otro archivo, puede usar #include "filename.h", donde filename.h es el nombre del archivo que declara las variables o funciones que desea usar.
    • Es recomendable organizar el código en archivos diferentes en función de lo que hace, por lo que es fácil encontrar el código que necesita más adelante. En nuestro caso, definimos la Calculator clase por separado del archivo que contiene la main() función, pero tenemos previsto hacer referencia a la Calculator clase en main().
  3. Aparece un subrayado ondulado verde debajo de Calculate porque, aunque la función Calculate está declarada, no está definida. Mantenga el puntero sobre Calculate, haga clic en la flecha hacia abajo en el icono de destornillador y seleccione Crear definición de "Calculate" en Calculator.cpp.

    Captura de pantalla de un menú desplegable en la ventana del editor de Visual Studio. La opción

    Este código se agrega a Calculator.cpp:

    Captura de pantalla del editor de Visual Studio que muestra la definición de la función

    La definición de la función es: double Calculator::Calculate( double x, char oper, double y) { return 0.0; }

    Actualmente, solo devuelve 0,0. Vamos a modificarlas.

  4. Cambie al archivo Calculator.cpp en la ventana del editor. Reemplace el contenido de Calculator::Calculate(double x, char oper, double y) por:

    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    Descripción del código

    • La función Calculate toma un número, un operador y un segundo número. A continuación, realiza la operación solicitada en los dos números.
    • La instrucción switch verifica cuál operador se ha proporcionado y ejecuta el caso correspondiente a dicha operación. El caso default: es una contingencia en caso de que el usuario escriba un operador que no sea gestionado por ninguna de las instrucciones anteriores case. Es mejor controlar la entrada de usuario no válida de una manera más elegante, pero esto está fuera del ámbito de este tutorial.
    • La double palabra clave denota un tipo de número que admite decimales. Este tipo de número se denomina número de punto flotante y double significa un número de punto flotante que tiene precisión adicional. De este modo, la calculadora puede controlar las matemáticas decimales y las matemáticas de enteros. La Calculate función es necesaria para devolver siempre un número de punto flotante de precisión doble debido al double inicio del código (esto denota el tipo de valor devuelto de la función), que es el motivo por el que se devuelve 0.0 en el caso predeterminado.
    • El .h archivo declara el prototipo de función, que indica al compilador por adelantado qué parámetros requiere y qué tipo de valor devuelto esperar de él. El .cpp archivo tiene todos los detalles de implementación de la función.

Si compila y vuelve a ejecutar el código en este punto, se cierra inmediatamente después de preguntar qué operación realizar. Por lo tanto, modifique la main función para realizar varios cálculos.

Llamada a las funciones miembro de clase Calculator

  1. Actualice la función main en CalculatorTutorial.cpp de la siguiente manera:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
             << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    

    Descripción del código

    • Puesto que los programas de C++ siempre comienzan en la main() función, es necesario llamar a nuestro otro código desde allí, por lo que se necesita una #include instrucción para que ese código sea visible para nuestra main() función.
    • Las variables x, y, opery result se declaran para almacenar el primer número, el segundo número, el operador y el resultado final, respectivamente. Siempre es recomendable darles algunos valores iniciales para evitar un comportamiento indefinido, que es lo que se hace aquí.
    • La Calculator c; línea declara un objeto denominado c como una instancia de la Calculator clase . La propia clase es simplemente un plano técnico para el funcionamiento de las calculadoras; el objeto es la calculadora específica que realiza las matemáticas.
    • La while (true) instrucción es un bucle. El código dentro del bucle se ejecuta una y otra vez, siempre y cuando la condición dentro de la () propiedad contenga true. Puesto que la condición simplemente aparece como true, siempre es true, por lo que el bucle se ejecuta para siempre. Para cerrar el programa, el usuario debe cerrar manualmente la ventana de la consola. De lo contrario, el programa siempre espera una nueva entrada.
    • La cin palabra clave acepta la entrada del usuario. El flujo de entrada es lo suficientemente inteligente como para procesar una línea de texto escrito en la ventana de la consola y colocarlo dentro de cada una de las variables enumeradas, en orden.
    • La c.Calculate(x, oper, y); expresión llama a la Calculate función definida anteriormente y proporciona los valores de entrada especificados y la operación solicitada. A continuación, la función devuelve un número que se almacena en result.
    • Por último, result se imprime en la consola y el usuario ve el resultado del cálculo.

Compilar y probar el código de nuevo

Ahora vuelva a probar el programa para asegurarse de que todo funciona correctamente.

  1. Presione Ctrl+F5 para volver a generar e iniciar la aplicación.

  2. Escriba 5+5y presione Entrar. Compruebe que el resultado es 10.

    Captura de pantalla de una ventana de comandos que muestra los resultados de la ejecución del programa.

    La aplicación genera el mensaje: Escriba la operación que se va a realizar. Formato: a+b | a-b | a*b | a/b. El usuario escribió 5+5. La salida de la aplicación: El resultado de 5+5 es: 10

  3. Detenga el programa cerrando la ventana de la consola.

Depurar la app

Dado que el usuario puede escribir cualquier cosa en la ventana de la consola, vamos a asegurarnos de que la calculadora controla la entrada inesperada. En lugar de ejecutar el programa, vamos a depurarlo para que podamos inspeccionar lo que está haciendo paso a paso.

Ejecución de la aplicación en el depurador

  1. En CalcuatorTutorial.cpp, establezca un punto de interrupción en la línea: result = c.Calculate(x, oper, y);. Para establecer el punto de interrupción, haga clic junto a la línea de la barra vertical gris a lo largo del borde izquierdo de la ventana del editor para que aparezca un punto rojo.

    Captura de pantalla del editor de Visual Studio. Un punto rojo que representa un punto de interrupción aparece en la línea: result = c.Calculate(x, oper, y).

    Ahora, cuando depuramos el programa, la ejecución se detiene en esa línea. Ya tenemos una idea aproximada de que el programa funciona para casos simples. Puesto que no queremos pausar la ejecución cada vez que llamamos a Calculate(), vamos a hacer condicional el punto de interrupción.

  2. Haga clic con el botón derecho en el punto rojo que representa el punto de interrupción y seleccione Condiciones. En el cuadro de edición de la condición, escriba (y == 0) && (oper == '/'). Seleccione el botón Cerrar para guardar la condición del punto de interrupción.

    Captura de pantalla de un punto de interrupción establecido

    El punto de interrupción está en la línea: result = c dot Calculate ( x, oper, y). 'Condiciones...' La opción Condición está activada. El menú desplegable Condiciones está configurado en "Expresión condicional". La lista desplegable de condiciones se establece en "Es verdadero". La condición se establece en y == 0 && oper == '/'.

    Ahora, la ejecución se detiene en el punto de interrupción cuando la aplicación intenta dividir en 0.

  3. Para depurar el programa, presione F5 o seleccione el botón de la barra de herramientas Depurador local de Windows que tiene un icono de flecha verde. En la aplicación de consola, si escribe algo parecido a "5 - 0", el programa se comporta normalmente y sigue ejecutándose. Sin embargo, si escribe "10 /0", se pausa en el punto de interrupción. Puede colocar cualquier número de espacios entre el operador y los números: cin es lo suficientemente inteligente como para analizar la entrada correctamente.

    Captura de pantalla del editor de Visual Studio. La ejecución del programa se detuvo en el punto de interrupción condicional de la línea: result = c.Calculate(x, oper, y);.

Ventanas útiles en el depurador

Al depurar el código, es posible que observe que aparecen algunas ventanas nuevas. Estas ventanas pueden mejorar su experiencia de depuración. Eche un vistazo a la ventana Autos. La ventana Autos muestra los valores actuales de las variables usadas al menos tres líneas antes y hasta la línea actual. Si no ve la ventana Autos, en el menú principal, seleccione Depurar>Windows>Autos.

Captura de pantalla de la ventana Autos del depurador de Visual Studio.

El valor de oper es 47 '/', el resultado es 5, x es 10 y y y es 0.

Para ver todas las variables de esa función, cambie a la ventana Variables locales . Dado que se trata de una función pequeña, las ventanas Auto y Variables local muestran las mismas variables. Pero puede modificar los valores de estas variables en la ventana Variables locales durante la depuración para ver qué efecto tendría en el programa. En este caso, los dejamos solos. Abra la ventana Variables locales seleccionando Variables locales en la parte inferior de la ventana Ventana de variables automáticas o seleccionando en el menú principal Depurar>Windows>Variables locales.

Captura de pantalla de la ventana Variables locales de Visual Studio, en la que se muestran los valores actuales de las variables locales durante la depuración.

El valor del oper es 47 '/', el resultado es 0, x es 10 y y y es 0.

También puede mantener el puntero sobre las variables en el código para ver sus valores actuales en el punto en el que la ejecución está en pausa actualmente. Asegúrese de que la ventana del editor está en el foco haciendo clic en ella primero.

Captura de pantalla de un mensaje emergente que muestra el valor de la variable

Continuar depuración

  1. La flecha amarilla de la izquierda muestra el punto actual de ejecución. La línea actual llama a Calculate, por lo que pulse F11 para Entrar en la función. Ahora está ejecutando código en el cuerpo de la función Calculate. Tenga cuidado con Step Into porque se adentra en cualquier función de la línea que está utilizando, incluidas las funciones de biblioteca estándar. Es adecuado profundizar en la biblioteca estándar, pero es posible que le interese centrarse en el código en lugar de en el código de biblioteca.

  2. Ahora que el punto de ejecución está al principio de la Calculate función, presione F10 para pasar a la línea siguiente de la ejecución del programa. F10 también se conoce como Saltar. Puede usar Step Over para pasar de línea a línea, sin profundizar en los detalles de lo que ocurre en cada parte de la línea. En general, debe usar Step Over en lugar de Step Into a menos que desee analizar más en profundidad el código al que se llama desde otro lugar (como lo hizo para llegar al cuerpo de Calculate).

  3. Siga usando F10 para recorrer paso a paso por cada línea hasta que vuelva a la main() función del otro archivo y se detenga en la cout línea.

    El programa está haciendo lo que se espera: toma el primer número y lo divide por segundo. En la cout línea, pon el ratón sobre la result variable o consulta result en la ventana Autos. Su valor es inf, que no parece correcto.

    Captura de pantalla de la depuración de la calculadora.

    La instrucción actual del depurador es cout << "Result is: " << resultado << endl; en la ventana de variables automáticas, el resultado es inf.

    Vamos a arreglarlo. La cout línea genera cualquier valor almacenado en result, por lo que cuando se avanza una línea más mediante F10, se muestra la ventana de la consola:

    Captura de pantalla de la consola de depuración de Visual Studio que muestra el resultado de una operación de división por cero.

    La aplicación muestra: introduzca la operación a realizar. Formato: a+b | a-b | a*b | a/b. El usuario introdujo 5-0. La salida de la aplicación: El resultado es: 5. El usuario escribió 10/0. La salida de la aplicación: El resultado es: inf

    Este resultado se debe a que la división por cero no está definida, por lo que el programa no tiene una respuesta numérica para la operación solicitada.

Corregir el error "división entre cero"

Vamos a controlar la división por cero con más gracia para que sea más fácil que el usuario comprenda el problema.

  1. Realice los cambios siguientes en CalculatorTutorial.cpp. Puede dejar el programa en ejecución mientras edita, gracias a una característica del depurador denominada Editar y continuar. Agregue una instrucción después de if para comprobar la división por cero y mostrar un mensaje al usuario si ocurre. De lo contrario, se imprime el resultado.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Math error: Attempted to divide by zero!" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Presione F5 una vez. La ejecución del programa continúa hasta que tiene que pausarse para solicitar la entrada del usuario. Vuelva a escribir 10 / 0 . Ahora, se imprime un mensaje más útil. Se solicita al usuario más entrada y el programa continúa ejecutándose con normalidad.

    Captura de pantalla de una ventana de consola que muestra la salida final después de implementar los cambios para controlar la división por cero.

    La ventana de consola muestra dos líneas: 10 / 0 El resultado es: inf, seguido por, 10 / 0 Error matemático: Intento de dividir por cero.

    Nota:

    Al editar código mientras está en modo de depuración, hay un riesgo de que el código quede obsoleto. Esto sucede cuando el depurador sigue ejecutando el código antiguo y aún no lo ha actualizado con los cambios. El depurador muestra un cuadro de diálogo para informarle de cuándo ocurre esto. A veces, es posible que tenga que presionar F5 para actualizar el código que se está ejecutando. En concreto, si realiza un cambio dentro de una función mientras el punto de ejecución está dentro de esa función, debe salir de la función y volver a entrar en ella para obtener el código actualizado. Si eso no funciona y ve un mensaje de error, puede detener la depuración haciendo clic en el cuadrado rojo de la barra de herramientas debajo de los menús de la parte superior del IDE y, a continuación, inicia la depuración de nuevo escribiendo F5 o seleccionando la flecha verde "reproducir" junto al botón detener de la barra de herramientas.

    Otra razón por la que editar y continuar puede producir un error es si ve un mensaje que indica "Requerir que los archivos de origen coincidan exactamente con la configuración de versión original en Debug-Options-General>> debe estar habilitado..." Para corregirlo, en el menú principal, seleccioneOpciones de>herramientas>Depuración>General y asegúrese de que Requerir que los archivos de origen coincidan exactamente con la versión original está activada.

    Descripción de los métodos abreviados de ejecución y depuración

    • F5, o Depurar>, inicia una sesión de depuración, si aún no está activa y ejecuta el programa hasta que se alcanza un punto de interrupción o el programa necesita la entrada del usuario. Si no se necesita ninguna entrada de usuario y no hay ningún punto de interrupción disponible para alcanzar, el programa finaliza y la ventana de la consola se cierra cuando el programa termina de ejecutarse. Si su programa envía la salida a la consola, utilice Ctrl+F5 o coloque un punto de interrupción antes de presionar F5 para mantener abierta la ventana.
    • Ctrl+F5 o Depurar>Iniciar sin depurar, ejecuta la aplicación sin entrar en modo de depuración. Esto es un poco más rápido que la depuración, y la ventana de la consola permanece abierta después de que el programa termine de ejecutarse.
    • F10, conocido como Paso sobre, le permite iterar a través del código, línea por línea, y visualizar cómo se ejecuta el código y cuáles son los valores de las variables en cada paso de ejecución.
    • F11, conocido como Entrar, funciona de forma similar a Saltar, excepto que entra en cualquier función llamada en la línea de ejecución. Por ejemplo, si la línea que se ejecuta llama a una función, al presionar F11 se mueve el puntero al cuerpo de la función, por lo que puede seguir el código de la función que se ejecuta antes de volver a la línea en la que se inició. Presionar F10 ejecuta por encima de la llamada de función y procede a la línea siguiente; la llamada de función sigue sucediendo, pero el programa no se detiene para mostrar lo que está haciendo.

Cerrar la aplicación

  • Si sigue ejecutándose, cierre la ventana de la consola para detener la aplicación de calculadora.

Adición del control de código fuente de Git

Ahora que ha creado una aplicación, es posible que quiera agregarla a un repositorio de Git. Tenemos lo que necesita. Visual Studio facilita ese proceso con las herramientas de Git que puede usar directamente desde el IDE.

Sugerencia

Git es el sistema de control de versiones moderno más usado, por lo que tanto si es desarrollador profesional como si está aprendiendo a codificar, Git puede ser muy útil. Si no está familiarizado con Git, el sitio web de https://git-scm.com/ es un buen lugar para empezar. Allí puede encontrar hojas de referencia rápida, un libro en línea popular y vídeos de Git Basics.

Para asociar el código a Git, empiece por crear un nuevo repositorio de Git donde se encuentra el código. A continuación se muestra cómo hacerlo:

  1. En la barra de estado de la esquina inferior derecha de Visual Studio, seleccione Agregar al control de código fuente y, a continuación, seleccione Git.

    Captura de pantalla de los botones de control de código fuente de Git debajo del panel Explorador de soluciones, con el botón Agregar al control de código fuente resaltado.

  2. En el cuadro de diálogo Crear un repositorio de Git , inicie sesión en GitHub.

    Captura de pantalla de la ventana de diálogo Crear un repositorio de Git donde se crea un nuevo repositorio de GitHub.

    El nombre del repositorio se rellena automáticamente en función de la ubicación de la carpeta. De forma predeterminada, el nuevo repositorio es privado, lo que significa que es el único que puede acceder a él.

    Sugerencia

    Tanto si el repositorio es público como privado, es mejor tener una copia de seguridad remota del código almacenado de forma segura en GitHub. Incluso si no está trabajando con un equipo, un repositorio remoto pone el código a su disposición desde cualquier equipo.

  3. Seleccione Crear y enviar los cambios.

    Después de crear el repositorio, los detalles de estado aparecen en la barra de estado.

    Captura de pantalla de la barra de estado del repositorio situada debajo del panel Explorador de soluciones de Visual Studio, en la que se muestra el nombre de la rama y el número de cambios pendientes.

    El primer icono con las flechas muestra cuántas confirmaciones salientes o entrantes se encuentran en la rama actual. Puede usar este icono para extraer las confirmaciones entrantes o empujar las confirmaciones salientes. También puede elegir ver primero estas confirmaciones. Para ello, seleccione el icono y, a continuación, seleccione Ver saliente/entrante.

    El segundo icono con el lápiz muestra el número de cambios no confirmados en el código. Puede seleccionar este icono para ver esos cambios en la ventana cambios de Git .

Para más información sobre cómo usar Git con la aplicación, consulte la documentación del control de versiones de Visual Studio.

La aplicación finalizada

¡Felicidades! Ha completado el código de la aplicación de calculadora, lo ha compilado y depurado y lo ha agregado a un repositorio, todo en Visual Studio.

Pasos siguientes

Más información sobre Visual Studio para C++

El punto de partida habitual para un programador de C++ es una aplicación "Hello, world!" que se ejecuta en la línea de comandos. Empieza con eso en este artículo y, a continuación, pasa a algo más difícil: una aplicación de calculadora.

Prerrequisitos

Creación del proyecto de aplicación

Visual Studio usa proyectos para organizar el código de una aplicación y soluciones para organizar uno o varios proyectos. Un proyecto contiene todas las opciones, configuraciones y reglas que se usan para compilar una aplicación. También administra la relación entre todos los archivos del proyecto y los archivos externos. Para crear la aplicación, en primer lugar, cree un nuevo proyecto y una solución.

  1. En la barra de menús de Visual Studio, seleccione Archivo>nuevo>proyecto. Se abre la ventana Nuevo proyecto .

  2. En la barra lateral izquierda, asegúrese de que Visual C++ está seleccionado. En el centro, seleccione Aplicación de consola.

  3. En el cuadro de texto Nombre de la parte inferior, asigne al nuevo proyecto el nombre CalculatorTutorial y seleccione Aceptar.

    Captura de pantalla del cuadro de diálogo Nuevo proyecto.

    A la izquierda, se selecciona Otros lenguajes > Visual C++. En el centro, se selecciona el tipo de proyecto Aplicación de consola. El cuadro de texto Nombre contiene CalculatorTutorial.

    Se crea una aplicación de consola de Windows "Hello World" vacía. Las aplicaciones de consola usan una ventana de consola de Windows para mostrar la salida y aceptar la entrada del usuario. En Visual Studio, se abre una ventana del editor y se muestra el código generado:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

Comprobación de que la nueva aplicación se compila y ejecuta

La plantilla de una nueva aplicación de consola de Windows crea una aplicación sencilla de C++ "Hola mundo". En este punto, puede ver cómo Visual Studio compila y ejecuta las aplicaciones que crea directamente desde el IDE.

  1. Para compilar el proyecto, seleccione Compilar solución en el menú Compilar . La ventana Salida muestra los resultados del proceso de compilación.

    Captura de pantalla de la ventana Salida de Visual Studio que muestra que la compilación se realizó correctamente.

  2. Para ejecutar el código, en la barra de menús, seleccione Depurar, Iniciar sin depurar (Ctrl+F5).

    Captura de pantalla de la consola de depuración de Visual Studio en la que se muestra la salida: Hola mundo.

    Se abre una ventana de consola y la aplicación se ejecuta dentro de ella.

    Al iniciar una aplicación de consola en Visual Studio, ejecuta el código y, a continuación, imprime Press any key to close this window . . . para ofrecerle la oportunidad de ver la salida.

    ¡Felicidades! Ha creado su primera aplicación de consola "Hola mundo!" en Visual Studio.

  3. Presione una tecla para descartar la ventana de la consola y volver a Visual Studio.

Ahora tiene las herramientas para compilar y ejecutar la aplicación después de cada cambio, para comprobar que el código sigue funcionando según lo previsto. Más adelante, le mostramos cómo depurarlo si no lo hace.

Edición del código

Ahora vamos a convertir el código en esta plantilla para que sea una aplicación de calculadora.

  1. Reemplace el contenido del CalculatorTutorial.cpp archivo por el código siguiente para que coincida con este ejemplo:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    Descripción del código:

    • La #include instrucción incluye código en otros archivos. A veces, puede ver un nombre de archivo rodeado de corchetes angulares como <iostream>. Los corchetes angulares indican al compilador que busque primero el iostream archivo de encabezado en los directorios del sistema estándar y, si no se encuentra, para buscar en directorios específicos del proyecto. Otras veces, es posible que vea un nombre de archivo entre comillas como "someHeader.h". Las comillas indican al compilador que omita la búsqueda en los directorios del sistema estándar y, en su lugar, solo busque en directorios específicos del proyecto.
    • using namespace std; indica al compilador que espere que el código de la biblioteca estándar de C++ se use en este archivo. Sin esta línea, cada palabra clave de la biblioteca tendría que ir precedida std:: de para indicar su ámbito. Por ejemplo, sin esa línea, cada referencia a cout se escribiría como std::cout. La using instrucción se agrega para facilitar el acceso al código en otro espacio de nombres.
    • La cout palabra clave imprime en la salida estándar de C++. El << operador indica al compilador que envíe lo que sea a la derecha de ella a la salida estándar.
    • La endl palabra clave es como la tecla Entrar; finaliza la línea y mueve el cursor a la línea siguiente. Se recomienda colocar un \n elemento dentro de la cadena (contenido por "") para hacer lo mismo porque endl siempre vacía el búfer y puede dañar el rendimiento del programa. Pero como se trata de una aplicación muy pequeña, endl se usa en su lugar.
    • Todas las instrucciones de C++ deben terminar con punto y coma y todas las aplicaciones de C++ deben contener una main() función. Esta función es lo que el programa se ejecuta al principio. Todo el código debe ser accesible desde main() para poder usarse.
  2. Para guardar el archivo, presione Ctrl+S o seleccione el icono de disco de disquete en la barra de herramientas de la barra de menús.

  3. Para ejecutar la aplicación, presione Ctrl+F5 o vaya al menú Depurar y seleccione Iniciar sin depurar. Si aparece un elemento emergente que indica Que este proyecto no está actualizado, puede seleccionar No mostrar este cuadro de diálogo de nuevo y, a continuación, seleccione para compilar la aplicación. Debería ver una ventana de consola que tiene este aspecto:

    Captura de pantalla de la aplicación de calculadora que se ejecuta en una ventana de consola.

    La aplicación de consola muestra que el resultado es: Aplicación de Consola de Calculadora. Escriba la operación que se va a realizar. Formato: a+b | a-b | a*b | a/b. El proceso terminó con el código 0, y hay un mensaje que indica que para cerrar automáticamente la consola cuando se detenga la depuración, debe habilitar Herramientas > Opciones > Depuración > Cerrar automáticamente la consola cuando se detenga la depuración. Por último, hay un mensaje para presionar cualquier tecla para cerrar esta ventana.

  4. Cierre la ventana de la consola cuando haya terminado.

Agregar código para realizar algunas matemáticas

Una clase es como un plano técnico de un objeto que hace algo. En este caso, definimos una clase de calculadora para que contenga la lógica matemática.

Agregar una clase Calculator

  1. Vaya al menú Proyecto y seleccione Agregar clase. En el cuadro de edición Nombre de clase, escriba Calculadora. Selecciona Aceptar.

    Captura de pantalla del cuadro de diálogo Agregar clase de Visual Studio.

    El campo nombre de clase contiene la calculadora de texto. El campo de archivo .h contiene Calculator.h. El campo archivo .cpp contiene Calculator.cpp. El campo de clase base está vacío. Las opciones de inline y Managed están desactivadas.

    Una clase es como un plano técnico de un objeto que hace algo. En este caso, definimos una calculadora y cómo debería funcionar.

    Se agregan dos nuevos archivos al proyecto. Para guardar todos los archivos modificados a la vez, presione Ctrl+Mayús+S. Es un método abreviado de teclado para Guardar>todo. También hay un botón de barra de herramientas para Guardar todo, un icono de dos discos de disquete, que se encuentra junto al botón Guardar . En general, es recomendable hacer Guardar todo con frecuencia, por lo que no se pierde ningún archivo al guardar.

    El Asistente para agregar clase crea .h archivos y .cpp que tienen el mismo nombre que la clase . Puede ver una lista completa de los archivos del proyecto en la ventana Explorador de soluciones, visible en el lado del IDE. Si el Explorador de soluciones no está visible, ábralo en la barra de menús: seleccione Ver> exploradorde soluciones.

    Captura de pantalla de la ventana Explorador de soluciones de Visual Studio.

    El proyecto del tutorial de calculadora tiene un nodo de archivos de encabezado que contiene Calculator.h, stdafx.h y targetver.h. Un nodo Archivos de origen contiene Calculator.cpp, CalculatorTutorial.cpp y stdafx.cpp. Los nodos de referencias, dependencias externas y archivos de recursos son visibles pero cerrados.

    Para abrir un archivo, haga doble clic en él en la ventana Explorador de soluciones. Haga doble clic Calculator.h para abrirlo.

  2. Reemplace el contenido de Calculator.h por el código siguiente para que el archivo tenga el siguiente aspecto:

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    Descripción del código

    • Este código declara una nueva función denominada Calculate, que controla las operaciones matemáticas para suma, resta, multiplicación y división.
    • El código de C++ se organiza en archivos de encabezado (.h) y archivos de origen (.cpp). Algunos otros compiladores admiten otras extensiones de archivo, pero estas son las principales que se deben conocer. Las funciones y las variables normalmente se declaran, es decir, se les da un nombre y un tipo, en archivos de encabezado, e implementan, o se les da una definición, en los archivos de origen. Para acceder al código definido en otro archivo, puede usar #include "filename.h", donde filename.h es el nombre del archivo que declara las variables o funciones que desea usar.
    • Es recomendable organizar el código en archivos diferentes en función de lo que hace, por lo que es fácil encontrar el código que necesita más adelante. En nuestro caso, definimos la Calculator clase por separado del archivo que contiene la main() función, pero tenemos previsto hacer referencia a la Calculator clase en main().
  3. Aparece un subrayado ondulado verde debajo de Calculate porque, aunque la función Calculate está declarada, no está definida. Mantenga el puntero sobre Calculate, haga clic en la flecha abajo de la bombilla y seleccione Crear definición de "Calculate" en Calculator.cpp. Aparece un elemento emergente que proporciona un vistazo al cambio de código realizado en el otro archivo. El código se agregó a Calculator.cpp.

    Vídeo mostrando cómo usar el menú desplegable de bombilla para seleccionar crear la definición de Calculate en Calculator.cpp.

    Actualmente, solo devuelve 0,0. Vamos a modificarlas. Presione Esc para cerrar el elemento emergente y elija para guardar los cambios.

  4. Cambie al archivo Calculator.cpp en la ventana del editor. Reemplace el contenido del archivo por el código siguiente:

    #include "Calculator.h"
    
    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    Descripción del código

    • La función Calculate toma un número, un operador y un segundo número. A continuación, realiza la operación solicitada en los dos números.
    • La instrucción switch verifica cuál operador se ha proporcionado y ejecuta el caso correspondiente a dicha operación. El caso default: es una contingencia en caso de que el usuario escriba un operador que no sea gestionado por ninguna de las instrucciones anteriores case. Es mejor controlar la entrada de usuario no válida de una manera más elegante, pero esto está fuera del ámbito de este tutorial.
    • La double palabra clave denota un tipo de número que admite decimales. Este tipo de número se denomina número de punto flotante y double significa un número de punto flotante que tiene precisión adicional. De este modo, la calculadora puede controlar las matemáticas decimales y las matemáticas de enteros. La Calculate función es necesaria para devolver siempre un número de punto flotante de precisión doble debido al double inicio del código (esto denota el tipo de valor devuelto de la función), que es el motivo por el que se devuelve 0.0 en el caso predeterminado.
    • El .h archivo declara el prototipo de función, que indica al compilador por adelantado qué parámetros requiere y qué tipo de valor devuelto esperar de él. El .cpp archivo tiene todos los detalles de implementación de la función.

Si compila y vuelve a ejecutar el código en este momento, todavía finaliza después de preguntar cuál operación se debe realizar. A continuación, modifique la main función para realizar algunos cálculos.

Llamada a las funciones miembro de la clase Calculator

  1. Actualice la función main en CalculatorTutorial.cpp de la siguiente manera:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    

    Descripción del código

    • Puesto que los programas de C++ siempre comienzan en la main() función, es necesario llamar a nuestro otro código desde allí, por lo que se necesita una #include instrucción para que ese código sea visible para nuestra main() función.
    • Las variables x, y, opery result se declaran para almacenar el primer número, el segundo número, el operador y el resultado final, respectivamente. Siempre es recomendable darles algunos valores iniciales para evitar un comportamiento indefinido, que es lo que se hace aquí.
    • La Calculator c; línea declara un objeto denominado c como una instancia de la Calculator clase . La propia clase es simplemente un plano técnico para el funcionamiento de las calculadoras; el objeto es la calculadora específica que realiza las matemáticas.
    • La while (true) instrucción es un bucle. El código dentro del bucle se ejecuta una y otra vez mientras la condición dentro de () sea verdadera. Puesto que la condición simplemente aparece como true, siempre es true, por lo que el bucle se ejecuta para siempre. Para cerrar el programa, el usuario debe cerrar manualmente la ventana de la consola. De lo contrario, el programa siempre espera una nueva entrada.
    • La cin palabra clave acepta la entrada del usuario. El flujo de entrada es lo suficientemente inteligente como para procesar una línea de texto escrito en la ventana de la consola y colocarlo dentro de cada una de las variables enumeradas, en orden.
    • La c.Calculate(x, oper, y); expresión llama a la Calculate función definida anteriormente y proporciona los valores de entrada especificados y la operación solicitada. A continuación, la función devuelve un número que se almacena en result.
    • Por último, result se imprime en la consola y el usuario ve el resultado del cálculo.

Compilar y probar el código de nuevo

Vuelva a probar el programa para asegurarse de que todo funciona correctamente.

  1. Presione Ctrl+F5 para volver a generar e iniciar la aplicación.

  2. Escriba 5+5y presione Entrar. Compruebe que el resultado es 10.

    Captura de pantalla de una ventana de comandos que ejecuta la aplicación Calculadora. Muestra que el resultado de 5 + 5 es 10.

  3. Detenga el programa cerrando la ventana de la consola.

Depurar la app

Dado que el usuario puede escribir cualquier cosa en la ventana de la consola, vamos a asegurarnos de que la calculadora controla la entrada inesperada. En lugar de ejecutar el programa, vamos a depurarlo en su lugar, por lo que podemos inspeccionar lo que está haciendo paso a paso.

Ejecución de la aplicación en el depurador

  1. En CalcuatorTutorial.cpp, establezca un punto de interrupción en la result = c.Calculate(x, oper, y); línea. Para establecer el punto de interrupción, haga clic junto a la línea de la barra vertical gris a lo largo del borde izquierdo de la ventana del editor para que aparezca un punto rojo.

    Captura de pantalla de la configuración de un punto de interrupción en la línea 23: result = c.Calculate(x, oper, y);.

    Ahora, cuando se depura el programa, siempre se pausa la ejecución en esa línea. Ya tenemos una idea aproximada de que el programa funciona para casos simples. Puesto que no queremos pausar la ejecución cada vez, vamos a hacer condicional el punto de interrupción.

  2. Haga clic con el botón derecho en el punto rojo que representa el punto de interrupción y seleccione Condiciones. En el cuadro de edición de la condición, escriba (y == 0) && (oper == '/'). Seleccione el botón Cerrar cuando haya terminado para guardar la condición del punto de interrupción.

    Captura de pantalla que muestra la ventana del punto de interrupción condicional.

    El punto de interrupción está en la línea: result = c dot Calculate ( x, oper, y). 'Condiciones...' La opción Condición está activada. El menú desplegable Condiciones está configurado en "Expresión condicional". La lista desplegable de condiciones se establece en "Es verdadero". La condición se establece en y == 0 && oper == '/'.

    La ejecución se pausará en el punto de interrupción si se intenta una división por 0.

  3. Para depurar el programa, presione F5 o seleccione el botón de la barra de herramientas Depurador de Windows local que tiene el icono de flecha verde. En la aplicación de consola, si escribe algo parecido a "5 - 0", el programa se comporta normalmente y sigue ejecutándose. Sin embargo, si escribe "10 /0", se pausa en el punto de interrupción. Incluso puede colocar cualquier número de espacios entre el operador y los números; cin es lo suficientemente inteligente como para analizar la entrada de forma adecuada.

    Vídeo que muestra la ejecución del programa en pausa en el punto de interrupción condicional.

    El usuario introduce 5 - 0. La aplicación muestra: Resultado: 5. A continuación, el usuario escribe 10/0 y, dado que se cumple la condición del punto de interrupción condicional, la ejecución se detiene en la línea: result = c.Calculate(x, oper, y);

Ventanas útiles en el depurador

Al depurar el código, es posible que observe que aparecen algunas ventanas nuevas. Estas ventanas pueden mejorar su experiencia de depuración. Eche un vistazo a la ventana Autos. La ventana Autos muestra los valores actuales de las variables usadas al menos tres líneas antes y hasta la línea actual. Si no ve la ventana Autos, en el menú principal, seleccione Depurar>Windows>Autos.

Captura de pantalla de la ventana Autos del depurador de Visual Studio.

El valor de oper es 47 '/', el resultado es 5, x es 10 y y y es 0.

Para ver todas las variables de esa función, cambie a la ventana Variables locales . Dado que se trata de una función pequeña, las ventanas Auto y Variables local muestran las mismas variables. Pero puede modificar los valores de estas variables durante la depuración para ver qué efecto tendría en el programa. En este caso, los dejamos solos. Abra la ventana Variables locales seleccionando Variables locales en la parte inferior de la ventana Ventana de variables automáticas o seleccionando en el menú principal Depurar>Windows>Variables locales.

Captura de pantalla de la ventana Variables locales de Visual Studio, en la que se muestran los valores actuales de las variables locales durante la depuración.

El valor del oper es 47 '/', el resultado es 0, x es 10 y y y es 0.

También puede mantener el puntero sobre las variables en el propio código para ver sus valores actuales en los que la ejecución está en pausa actualmente. Asegúrese de que la ventana del editor está en el foco haciendo clic en ella primero.

Vídeo que muestra un tooltip que aparece mientras se mantiene el puntero sobre la variable y. Muestra el valor actual de y, que es 0.

Continuar depuración

  1. La flecha amarilla de la izquierda muestra el punto actual de ejecución. La línea actual llama a Calculate, por lo que presione F11 para Entrar en la función, que le lleva al cuerpo de la función Calculate. Tenga cuidado con Step Into porque se adentra en cualquier función de la línea que está utilizando, incluidas las funciones de biblioteca estándar. Es adecuado profundizar en la biblioteca estándar, pero es posible que le interese centrarse en el código en lugar de en el código de biblioteca.

  2. Ahora que el punto de ejecución está al principio de la Calculate función, presione F10 para pasar a la línea siguiente de la ejecución del programa. F10 también se conoce como Saltar. Puede usar Step Over para pasar de línea a línea, sin profundizar en los detalles de lo que ocurre en cada parte de la línea. En general, debería usar Step Over en lugar de Step Into, a menos que desee analizar más profundamente el código que se llama desde otro lugar (como lo hizo para llegar al cuerpo de Calculate).

  3. Siga usando F10 para recorrer paso a paso por cada línea hasta que vuelva a la main() función del otro archivo y se detenga en la cout línea.

    El programa está haciendo lo que se espera: toma el primer número y lo divide por segundo. En la cout línea, pon el ratón sobre la result variable o consulta result en la ventana Autos. Su valor es inf, que no parece correcto.

    Captura de pantalla de la depuración de la calculadora.

    La instrucción actual del depurador es cout << "Result is: " << resultado << endl; en la ventana de variables automáticas, el resultado es inf.

    Vamos a arreglarlo. La cout línea genera cualquier valor almacenado en result, por lo que cuando se avanza una línea más mediante F10, se muestra la ventana de la consola:

    Captura de pantalla de la consola de depuración de Visual Studio que muestra el resultado de una operación de división por cero.

    La aplicación muestra: introduzca la operación a realizar. Formato: a+b | a-b | a*b | a/b. El usuario introdujo 5-0. La salida de la aplicación: El resultado es: 5. El usuario escribió 10/0. La salida de la aplicación: El resultado es: inf

    Este resultado se debe a que la división por cero no está definida, por lo que el programa no tiene una respuesta numérica para la operación solicitada.

Corregir el error "división entre cero"

Vamos a controlar la división por cero con más gracia para que sea más fácil que el usuario comprenda el problema.

  1. Realice los cambios siguientes en CalculatorTutorial.cpp. (Puede dejar el programa en ejecución mientras edita, gracias a una característica del depurador denominada Editar y continuar). El cambio consiste en agregar una if instrucción a continuación de cin >> x >> oper >> y; para comprobar la división por cero y mostrar un mensaje al usuario si se produce. De lo contrario, se imprime el resultado:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Division by 0 exception" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Presione F5 una vez. La ejecución del programa continúa hasta que tiene que pausarse para solicitar la entrada del usuario. Vuelva a escribir 10 / 0 . Ahora, se imprime un mensaje más útil. Se solicita al usuario más entrada y el programa continúa ejecutándose con normalidad.

    Vídeo de la consola de depuración que muestra el resultado final después de los cambios de código. Se introduce 10 / 0 y el programa muestra

    Nota:

    Al editar código mientras está en modo de depuración, hay un riesgo de que el código quede obsoleto. Esto sucede cuando el depurador sigue ejecutando el código antiguo y aún no lo ha actualizado con los cambios. El depurador abre un cuadro de diálogo para informarle de cuándo ocurre esto. A veces, es posible que tenga que presionar F5 para actualizar el código que se está ejecutando. En concreto, si realiza un cambio dentro de una función mientras el punto de ejecución está dentro de esa función, salga de la función y vuelva a entrar en ella para obtener el código actualizado. Si esto no funciona por algún motivo y ve un mensaje de error, puede detener la depuración haciendo clic en el cuadrado rojo de la barra de herramientas debajo de los menús de la parte superior del IDE y, a continuación, inicia la depuración de nuevo escribiendo F5 o seleccionando la flecha verde "reproducir" junto al botón de detención de la barra de herramientas.

    Otro motivo por el que puede fallar la función de edición y continuación es que necesita ir al menú principal y seleccionar Herramientas>Opciones>Depuración>General y asegurarse de que Requerir que los archivos de origen coincidan exactamente con la versión original está activada.

    Descripción de los métodos abreviados de ejecución y depuración

    • F5, o Depurar>, inicia una sesión de depuración, si aún no está activa y ejecuta el programa hasta que se alcanza un punto de interrupción o el programa necesita la entrada del usuario. Si no se necesita ninguna entrada de usuario y no hay ningún punto de interrupción disponible para alcanzar, el programa finaliza y la ventana de la consola se cierra cuando el programa termina de ejecutarse. Si su programa envía la salida a la consola, utilice Ctrl+F5 o coloque un punto de interrupción antes de presionar F5 para mantener abierta la ventana.
    • Ctrl+F5 o Depurar>Iniciar sin depurar, ejecuta la aplicación sin entrar en modo de depuración. Esto es un poco más rápido que la depuración, y la ventana de la consola permanece abierta después de que el programa termine de ejecutarse.
    • F10, conocido como Paso sobre, le permite iterar a través del código, línea por línea, y visualizar cómo se ejecuta el código y cuáles son los valores de las variables en cada paso de ejecución.
    • F11, conocido como Entrar, funciona de forma similar a Saltar, excepto que entra en cualquier función llamada en la línea de ejecución. Por ejemplo, si la línea que se ejecuta llama a una función, al presionar F11 se mueve el puntero al cuerpo de la función, por lo que puede seguir el código de la función que se ejecuta antes de volver a la línea en la que se inició. Presionar F10 ejecuta por encima de la llamada de función y procede a la línea siguiente; la llamada de función sigue sucediendo, pero el programa no se detiene para mostrar lo que está haciendo.

Cerrar la aplicación

  • Si sigue ejecutándose, cierre la ventana de la consola para detener la aplicación de calculadora.

La aplicación finalizada

¡Felicidades! Ha completado el código de la aplicación de calculadora y lo ha compilado y depurado en Visual Studio.

Pasos siguientes

Más información sobre Visual Studio para C++