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

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

Requisitos previos

  • 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 llamada Editar y continuar, que permite realizar cambios en el código mientras la aplicación se ejecuta. 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 sirve para administrar la relación entre todos los archivos del proyecto y cualquier archivo externo. Para crear la aplicación, primero hay que crear un 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 la lista de plantillas de proyecto, seleccione Aplicación de consola y, después, Siguiente.

    Captura de pantalla del cuadro de diálogo Crear un nuevo proyecto de Visual Studio. La opción Plantilla aplicación de consola está resaltada.

    Importante

    Asegúrese de seleccionar la versión de C++ de la plantilla Aplicación de consola. Tiene las etiquetas C++ , Windows y consola y el icono tiene "++" en una 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 "Hola mundo" vacía de C++. 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 en la que 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
    

Compruebe que la nueva aplicación se compila y ejecuta

La plantilla para una nueva aplicación de consola de Windows crea una sencilla aplicación "Hola mundo" de C++. En este momento, 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 . En la ventana Salida se muestran 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, Iniciar 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 después se ejecuta la aplicación.

    Al iniciar una aplicación de consola en Visual Studio, se ejecuta el código y se muestra el mensaje "Presione cualquier tecla para cerrar esta ventana. . . ." 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 cerrar 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 esperado. Más adelante, se mostrará cómo depurarlo si no funciona.

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 archivo CalculatorTutorial.cpp 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:

    • Las instrucciones #include permiten hacer referencia a código que se encuentra en otros archivos. En ocasiones, es posible que vea un nombre de archivo incluido entre corchetes angulares (<>); en otras, estará rodeado por comillas (" "). En general, los corchetes angulares se usan al hacer referencia a la biblioteca C++ Standard, mientras que las comillas se usan para otros archivos.
    • La línea using namespace std; indica al compilador que espere que en este archivo se usen elementos de la biblioteca C++ Standard. Sin esta línea, cada palabra clave de la biblioteca debe ir precedida de std:: para denotar su ámbito. Por ejemplo, sin esa línea, cada referencia a cout se tendría que escribir como std::cout. La instrucción using se agrega para que el código parezca más limpio.
    • La palabra clave cout se usa para imprimir en la salida estándar de C++. El operador << indica al compilador que envíe a la salida estándar todo lo que esté a su derecha.
    • La palabra clave endl es similar a la tecla Entrar; finaliza la línea y mueve el cursor a la 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. Dado que esta aplicación es muy pequeña, en su lugar se usa endl para mejorar la legibilidad.
    • Todas las instrucciones de C++ deben terminar en punto y coma, y todas las aplicaciones de C++ deben contener una función main(). Esta función es lo que el programa ejecuta al inicio. Todo el código debe ser accesible desde main() para que se pueda usar.
  2. Para guardar el archivo, presione Ctrl+S o seleccione el icono Guardar situado cerca de la parte superior del IDE, el icono de disco de disquete de 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 aparecer una ventana de consola que muestra el texto especificado en el código.

  4. Cuando haya terminado, cierre la ventana de la consola.

Adición de código para realizar cálculos matemáticos

Una clase es como un plano técnico para un objeto que realiza una acción. 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 Calculator. Seleccione Aceptar.

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

    El campo nombre de clase se establece en calculator. El campo de archivo .h contiene Calculator.h. El campo archivo .cpp contiene Calculator.cpp. El campo de clase base está vacío. Otras opciones de destructor virtual, insertadas y no administradas están desactivadas.

    Se agregan dos nuevos archivos al proyecto. Para guardar todos los archivos modificados a la vez, presione Ctrl+Mayús+S. Se trata de un método abreviado de teclado para Archivo>Guardar todo. También hay un botón de la barra de herramientas para Guardar todo, un icono de dos discos, que se encuentra junto al botón Guardar. En general, se recomienda Guardar todo con frecuencia, para no perder 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 lateral del IDE. Si la ventana no está visible, puede abrirla en la barra de menús: seleccione Ver> Explorador de soluciones.

    Captura de pantalla de la ventana de 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.

    Puede abrir un archivo haciendo 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 de forma 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 función nueva llamada Calculate, que se usa para ejecutar las operaciones matemáticas de suma, resta, multiplicación y división.
    • El código de C++ se organiza en archivos de encabezado (.h) y de código fuente (.cpp). Otros compiladores admiten otras extensiones de archivo, pero estas son las principales que debe conocer. Normalmente, las funciones y variables se declaran, es decir, se les asigna un nombre y un tipo, en los archivos de encabezado, y se implementan (se les asigna 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 las funciones que quiere usar.
    • Es recomendable organizar el código en distintos archivos según lo que haga, para que después sea más sencillo encontrar el código que necesita. En este caso, la clase Calculator se define de forma independiente al archivo que contiene la función main(), pero el objetivo es hacer referencia a la clase Calculator en main().
  3. Aparece un subrayado ondulado verde en Calculate porque, aunque se declara la Calculate función, no está definida. Mantenga el puntero sobre Calculate, haga clic en la flecha hacia abajo en el destornillador que aparece y seleccione Crear definición de "Calculate" en Calculator.cpp.

    Captura de pantalla de una lista desplegable de destornillador 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 ctor

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

    En la actualidad, solo devuelve 0,0. Vamos a cambiarlo.

  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 consume un número, un operador y un segundo número, y después realiza la operación solicitada en los números.
    • La instrucción switch comprueba qué operador se ha proporcionado y solo ejecuta el caso correspondiente a esa operación. El valor predeterminado: case es una reserva en caso de que el usuario escriba un operador que no se acepta, para que el programa no se interrumpa. En general, se recomienda controlar la entrada no válida del usuario de una manera más elegante, pero esto queda fuera del ámbito de este tutorial.
    • La palabra clave double denota un tipo de número que admite decimales. De este modo, la calculadora puede realizar operaciones matemáticas decimales y enteras. Es necesario que la función Calculate siempre devuelva un número como este debido a la presencia de double al principio del código (lo que denota el tipo de valor devuelto de la función), motivo por el que se devuelve 0,0 incluso en el caso predeterminado.
    • En el archivo .h se declara el prototipo de la función, que indica al compilador por adelantado qué parámetros requiere y el tipo de valor devuelto que se puede esperar de ella. El archivo .cpp contiene todos los detalles de implementación de la función.

Si compila y ejecuta el código de nuevo en este punto, se cerrará 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 de CalculatorTutorial.cpp la main 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

    • Como los programas de C++ siempre comienzan por la función main(), es necesario llamar al otro código desde ahí, por lo que se necesitará una instrucción #include.
    • Se declaran varias variables iniciales (x, y, oper y result) para almacenar el primer número, el segundo, 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í.
    • En la línea Calculator c; se declara un objeto denominado "c" como una instancia de la clase Calculator. La propia clase es solo un plano técnico del funcionamiento de las calculadoras; el objeto es la calculadora concreta que realiza los cálculos matemáticos.
    • La instrucción while (true) es un bucle. El código que contiene el bucle se sigue ejecutando repetidamente mientras la condición dentro de () sea true. Como la condición aparece simplemente como true, siempre es true, por lo que el bucle se ejecuta de forma indefinida. Para cerrar el programa, el usuario debe cerrar manualmente la ventana de la consola. En caso contrario, el programa siempre espera una entrada nueva.
    • La palabra clave cin se usa para aceptar la entrada del usuario. Esta secuencia de entrada es lo suficientemente inteligente como para procesar una línea de texto especificado en la ventana de consola y colocarla dentro de cada una de las variables enumeradas, en orden, siempre que la entrada del usuario coincida con la especificación necesaria. Puede modificar esta línea para aceptar distintos tipos de entrada, por ejemplo, más de dos números, aunque también se tendría que actualizar la función Calculate() para procesarlo.
    • La expresión c.Calculate(x, oper, y); llama a la función Calculate definida anteriormente y proporciona los valores de entrada especificados. Después, la función devuelve un número que se almacena en result.
    • Por último, se imprime result en la consola, para que el usuario vea el resultado del cálculo.

Volver a compilar y probar el código

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

  1. Presione Ctrl+F5 para recompilar e iniciar la aplicación.

  2. Escriba 5+5 y 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

Depurar la aplicación

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 ello, haga clic en la línea en la barra vertical de color gris del borde izquierdo de la ventana del editor. Aparece 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 sencillos. 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 para 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 Visual Studio que muestra el punto de interrupción Configuración emergente.

    La condición del punto de interrupción es: y==0 && oper == '/' Es true.

    Ahora, la ejecución se pausará en el punto de interrupción cuando la aplicación intente dividir en 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 con normalidad y se sigue ejecutando. Pero si escribe "10 / 0", se detiene 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 del depurador

Al depurar el código, es posible que observe que aparecen algunas ventanas nuevas. Estas ventanas pueden ayudar a la experiencia de depuración. Fíjese en la ventana Automático. En la ventana Automático se muestran los valores actuales de las variables que se han usado al menos tres líneas antes y hasta la línea actual.

Captura de pantalla de la ventana Automático 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. Puede modificar los valores de estas variables durante la depuración para ver qué efecto tendría en el programa. En este caso, se dejan como están.

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. Para asegurarse de que la ventana del editor tiene el foco, haga clic en ella primero.

Captura de pantalla de una información sobre herramientas que muestra el valor de la variable

Continuar la depuración

  1. La flecha de color amarillo de la izquierda muestra el punto de ejecución actual. La línea actual llama a Calculate, por lo que presione F11 para Depurar paso a paso por instrucciones la función. Ahora está ejecutando código en el cuerpo de la función Calculate. Tenga cuidado con Depurar paso a paso por instrucciones, ya que realiza esta acción en cualquier función de la línea en la que se encuentre, incluidas las funciones de biblioteca estándar. Es adecuado depurar la biblioteca estándar paso a paso por instrucciones, pero puede que le interese centrarse en su código en lugar de en el código de biblioteca.

  2. Ahora que el punto de ejecución está al principio de la función Calculate, presione F10 para pasar a la línea siguiente en la ejecución del programa. F10 también se conoce como Depurar paso a paso por procedimientos. Se puede usar Depurar paso a paso por procedimientos para pasar de una línea a otra, sin profundizar en los detalles de lo que ocurre en cada elemento de la línea. En general, debe usar Depurar paso a paso por procedimientos en lugar de Depurar paso a paso por instrucciones, a menos que quiera profundizar más en el código que se llama desde otra parte (como hizo para llegar al cuerpo de Calculate).

  3. Siga presionando F10 para Depurar paso a paso por procedimientos cada línea hasta que regrese a la función main() del otro archivo, y deténgase en la línea cout.

    El programa está haciendo lo que se espera: toma el primer número y lo divide por segundo. En la línea cout, mantenga el puntero sobre la variable result o examine result en la ventana Automático. Su valor es inf, que no parece correcto, por lo que vamos a corregirlo. En la línea cout solo se muestra el valor almacenado en result, por lo que al avanzar una línea más mediante F10, en la ventana de consola se muestra:

    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.

    Salida de la aplicación: escriba la operación que se va a realizar. Formato: a+b | a-b | a*b | a/b. El usuario especificó entre 5 y 0. La salida de la aplicación: El resultado es: 5. El usuario especificó el 10/0. La salida de la aplicación: Result is: 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 abordar la división por cero de manera más eficaz para que sea más fácil para el usuario comprender el problema.

  1. Realice los siguientes cambios 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 if instrucción siguiente cin >> x >> oper >> y; para comprobar la división por cero y generar 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 << "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 detenerse para solicitar la entrada del usuario. Vuelva a escribir 10 / 0. Ahora, se imprime un mensaje más útil. Al usuario se le solicita una entrada adicional y el programa se continúa ejecutando 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 Resultado es: inf, seguido de, error matemático 10 /0: Intento de dividir por cero.

    Nota:

    Cuando se edita código en modo de depuración, hay riesgo de que se vuelva obsoleto. Esto sucede cuando el depurador sigue ejecutando el código antiguo y todavía no se ha actualizado con los cambios. El depurador muestra un cuadro de diálogo en el que se le informará cuando esto ocurra. En ocasiones, es posible que deba 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 ella, tiene que depurarla paso a paso por procedimientos y después volver a acceder a la función 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, seleccione Opciones 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 Ejecutar y Depurar

    • Mediante F5 (o Depurar>Iniciar depuración) se inicia una sesión de depuración si todavía no hay ninguna activa, y se ejecuta el programa hasta que se alcanza un punto de interrupción o el programa necesita la entrada del usuario. Si no se necesita la entrada del usuario y no hay ningún punto de interrupción disponible, el programa finaliza y la ventana de la consola se cierra de forma automática cuando el programa termina de ejecutarse. Si tiene algo parecido a un programa "Hola mundo" para ejecutar, use Ctrl+F5 o establezca un punto de interrupción antes de presionar F5 para mantener la ventana abierta.
    • Mediante Ctrl+F5 (o Depurar>Iniciar sin depurar) se ejecuta la aplicación sin entrar en modo de depuración. Esto es ligeramente 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 Depurar paso a paso por procedimientos) permite iterar por el código línea a línea y visualizar cómo se ejecuta y cuáles son los valores de variable en cada paso de la ejecución.
    • F11 (conocido como Depurar paso a paso por instrucciones) funciona de forma similar a Depurar paso a paso por procedimientos, con la excepción de que depura paso a paso por procedimientos las funciones a las que se llama en la línea de ejecución. Por ejemplo, si la línea que se está ejecutando llama a una función, al presionar F11 el puntero se desplaza al cuerpo de la función, para que pueda seguir la ejecución del código de la función antes de volver a la línea de partida. Al presionar F10 la llamada de función se depura paso a paso por instrucciones y simplemente pasa a la línea siguiente; la llamada de función se sigue produciendo, pero el programa no se detiene para mostrarle lo que está haciendo.

Cierre la aplicación

  • Si sigue en ejecución, cierre la ventana de la consola de la aplicación de calculadora.

Adición de control de código fuente 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 el 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 un desarrollador profesional como si está aprendiendo a codificar, Git puede ser muy útil. Si ha empezado a usar Git recientemente, el sitio web https://git-scm.com/ es un buen punto de partida. Allí encontrará hojas de referencia rápida, un libro en línea conocido y vídeos de conceptos básicos de Git.

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, Git.

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

  2. Cuadro de diálogo Crear un repositorio GIT inicie sesión en GitHub.

    Captura de pantalla de la ventana del cuadro de diálogo Crear un repositorio de Git donde se crea un 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 usted 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 almacenada de forma segura en GitHub. Incluso si no trabaja con un equipo, un repositorio remoto pone el código a su disposición desde cualquier equipo.

  3. Seleccione Crear e insertar.

    Después de crear el repositorio, aparecen los detalles de estado 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 hay en la rama actual. Puede usar este icono para extraer las confirmaciones entrantes o insertar las confirmaciones salientes. Puede elegir ver estas confirmaciones en primer lugar. Para ello, seleccione el icono y, a continuación, Ver salientes y entrantes.

    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 obtener 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 "Hola mundo" que se ejecuta en la línea de comandos. Comienza con eso en este artículo y, a continuación, pasamos a algo más difícil: una aplicación de calculadora.

Requisitos previos

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 sirve para administrar la relación entre todos los archivos del proyecto y cualquier archivo externo. Para crear la aplicación, primero hay que crear un proyecto y una solución.

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

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

  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. Se selecciona el tipo de proyecto Aplicación de consola de Windows. Cuadro de texto Nombre establecido en CalculatorTutorial.

    Se crea una aplicación de consola de Windows "Hola mundo" vacía de C++. 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 en la que 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
    

Compruebe que la nueva aplicación se compila y ejecuta

La plantilla para una nueva aplicación de consola de Windows crea una sencilla aplicación "Hola mundo" de C++. En este momento, 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 . En la ventana Salida se muestran los resultados del proceso de compilación.

    Captura de pantalla de la ventana Salida de Visual Studio en la que se 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 después se ejecuta la aplicación.

    Al iniciar una aplicación de consola en Visual Studio, se ejecuta el código y se muestra el mensaje "Presione cualquier tecla para cerrar esta ventana. . . ." 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 cerrar 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 esperado. Más adelante, se mostrará cómo depurarlo si no funciona.

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 archivo CalculatorTutorial.cpp 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:

    • Las instrucciones #include permiten hacer referencia a código que se encuentra en otros archivos. En ocasiones, es posible que vea un nombre de archivo incluido entre corchetes angulares (<>); en otras, estará rodeado por comillas (" "). En general, los corchetes angulares se usan al hacer referencia a la biblioteca C++ Standard, mientras que las comillas se usan para otros archivos.
    • La línea using namespace std; indica al compilador que espere que en este archivo se usen elementos de la biblioteca C++ Standard. Sin esta línea, cada palabra clave de la biblioteca debe ir precedida de std:: para denotar su ámbito. Por ejemplo, sin esa línea, cada referencia a cout se tendría que escribir como std::cout. La instrucción using se agrega para que el código parezca más limpio.
    • La palabra clave cout se usa para imprimir en la salida estándar de C++. El operador *<< indica al compilador que envíe a la salida estándar todo lo que esté a su derecha.
    • La palabra clave endl es similar a la tecla Entrar; finaliza la línea y mueve el cursor a la 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. Dado que esta aplicación es muy pequeña, en su lugar se usa endl para mejorar la legibilidad.
    • Todas las instrucciones de C++ deben terminar en punto y coma, y todas las aplicaciones de C++ deben contener una función main(). Esta función es lo que el programa ejecuta al inicio. Todo el código debe ser accesible desde main() para que se pueda usar.
  2. Para guardar el archivo, presione Ctrl+S o seleccione el icono Guardar situado cerca de la parte superior del IDE, el icono de disco de disquete de 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 aparecer una ventana de consola que muestra el texto especificado en el código.

    Vídeo en el que se muestra el proceso de ejecución de la aplicación de calculadora en el IDE.

    En primer lugar, aparece un cuadro de diálogo que pregunta si se va a compilar porque el proyecto no está actualizado. La casilla "No volver a mostrar este cuadro de diálogo" está seleccionada. Se selecciona "Sí" para compilar el proyecto, este proyecto de calculadora se compilará y, después, se iniciará en una ventana de la consola de Windows.

  4. Cuando haya terminado, cierre la ventana de la consola.

Adición de código para realizar cálculos matemáticos

Una clase es como un plano técnico para un objeto que realiza una acción. 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 Calculator. Seleccione Aceptar.

    Vídeo que muestra al usuario que abre el cuadro de diálogo Agregar clase, escribe

    Una clase es como un plano técnico para un objeto que realiza una acción. En este caso, se define 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. Se trata de un método abreviado de teclado para Archivo>Guardar todo. También hay un botón de la barra de herramientas para Guardar todo, un icono de dos discos, que se encuentra junto al botón Guardar. En general, se recomienda Guardar todo con frecuencia, para no perder 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 lateral del IDE. Si la ventana no está visible, puede abrirla en la barra de menús: seleccione Ver> Explorador de soluciones.

    Captura de pantalla de la ventana de 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.

    Puede abrir un archivo haciendo 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 de forma 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 función nueva llamada Calculate, que se usa para ejecutar las operaciones matemáticas de suma, resta, multiplicación y división.
    • El código de C++ se organiza en archivos de encabezado (.h) y de código fuente (.cpp). Otros compiladores admiten otras extensiones de archivo, pero estas son las principales que debe conocer. Normalmente, las funciones y variables se declaran, es decir, se les asigna un nombre y un tipo, en los archivos de encabezado, y se implementan (se les asigna 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 las funciones que quiere usar.
    • Es recomendable organizar el código en distintos archivos según lo que haga, para que después sea más sencillo encontrar el código que necesita. En este caso, la clase Calculator se define de forma independiente al archivo que contiene la función main(), pero el objetivo es hacer referencia a la clase Calculator en main().
  3. Aparece un subrayado ondulado verde en Calculate porque, aunque se declara la Calculate función, no está definida. Mantenga el puntero sobre Calculate, haga clic en la flecha hacia abajo en el destornillador que aparece y seleccione Crear definición de "Calculate" en Calculator.cpp. Aparecerá un mensaje emergente en el que se ofrece una vista del cambio de código que se ha realizado en el otro archivo. El código se ha agregado a Calculator.cpp.

    Vídeo que muestra el uso de la lista desplegable de bombillas para seleccionar Crear definición de Calculate en Calculator.cpp.

    En la actualidad, solo devuelve 0,0. Vamos a cambiarlo. Presione Esc para cerrar la ventana emergente.

  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 consume un número, un operador y un segundo número, y después realiza la operación solicitada en los números.
    • La instrucción switch comprueba qué operador se ha proporcionado y solo ejecuta el caso correspondiente a esa operación. El valor predeterminado: case es una reserva en caso de que el usuario escriba un operador que no se acepta, para que el programa no se interrumpa. En general, se recomienda controlar la entrada no válida del usuario de una manera más elegante, pero esto queda fuera del ámbito de este tutorial.
    • La palabra clave double denota un tipo de número que admite decimales. De este modo, la calculadora puede realizar operaciones matemáticas decimales y enteras. Es necesario que la función Calculate siempre devuelva un número como este debido a la presencia de double al principio del código (lo que denota el tipo de valor devuelto de la función), motivo por el que se devuelve 0,0 incluso en el caso predeterminado.
    • En el archivo .h se declara el prototipo de la función, que indica al compilador por adelantado qué parámetros requiere y el tipo de valor devuelto que se puede esperar de ella. El archivo .cpp contiene todos los detalles de implementación de la función.

Si compila y ejecuta el código de nuevo en este momento, se cerrará después de preguntarle qué operación debe realizarse. Después, modifique la función main para realizar algunos cálculos.

Llamada a las funciones miembro de la clase Calculator

  1. Ahora se va a actualizar la función main de CalculatorTutorial.cpp:

    // 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

    • Como los programas de C++ siempre comienzan por la función main(), es necesario llamar al otro código desde ahí, por lo que se necesitará una instrucción #include.
    • Se declaran varias variables iniciales (x, y, oper y result) para almacenar el primer número, el segundo, 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í.
    • En la línea Calculator c; se declara un objeto denominado "c" como una instancia de la clase Calculator. La propia clase es solo un plano técnico del funcionamiento de las calculadoras; el objeto es la calculadora concreta que realiza los cálculos matemáticos.
    • La instrucción while (true) es un bucle. El código que contiene el bucle se sigue ejecutando repetidamente mientras la condición dentro de () sea true. Como la condición aparece simplemente como true, siempre es true, por lo que el bucle se ejecuta de forma indefinida. Para cerrar el programa, el usuario debe cerrar manualmente la ventana de la consola. En caso contrario, el programa siempre espera una entrada nueva.
    • La palabra clave cin se usa para aceptar la entrada del usuario. Esta secuencia de entrada es lo suficientemente inteligente como para procesar una línea de texto especificado en la ventana de consola y colocarla dentro de cada una de las variables enumeradas, en orden, siempre que la entrada del usuario coincida con la especificación necesaria. Puede modificar esta línea para aceptar distintos tipos de entrada, por ejemplo, más de dos números, aunque también se tendría que actualizar la función Calculate() para procesarlo.
    • La expresión c.Calculate(x, oper, y); llama a la función Calculate definida anteriormente y proporciona los valores de entrada especificados. Después, la función devuelve un número que se almacena en result.
    • Por último, se imprime result en la consola, para que el usuario vea el resultado del cálculo.

Volver a compilar y probar el código

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

  1. Presione Ctrl+F5 para recompilar e iniciar la aplicación.

  2. Escriba 5+5 y 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.

Depurar la aplicación

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 ello, haga clic en la línea en la barra vertical de color gris del borde izquierdo de la ventana del editor. Aparece un punto rojo.

    Vídeo que muestra el usuario que establece un punto de interrupción en la línea 25: result = c.Calculate(x, oper, y);.

    Ahora, cuando se depure el programa, la ejecución siempre se detendrá en esa línea. Ya tenemos una idea aproximada de que el programa funciona para casos sencillos. Ya que no queremos pausar la ejecución cada vez, vamos a hacer condicional un 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 para 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.

    Vídeo que muestra el proceso de establecimiento de un punto de interrupción condicional.

    El punto de interrupción está en la línea: result = c dot Calculate ( x, oper, y). 'Condiciones...' se selecciona en la lista desplegable punto de interrupción, que abre la ventana de configuración del punto de interrupción. La opción Condición está activada, debajo de la cual se establecen las listas desplegables como: "Expresión condicional" y "Is true". El usuario escribe y == 0 && oper == '/' en el cuadro de texto condición y, a continuación, selecciona cerrar para establecer el punto de interrupción condicional.

    Ahora, la ejecución se detiene en el punto de interrupción solo si se intenta realizar 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 con normalidad y se sigue ejecutando. Pero si escribe "10 / 0", se detiene en el punto de interrupción. Incluso puede agregar 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 escribe entre 5 y 0. Salidas de la aplicación: el resultado es 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 del depurador

Al depurar el código, es posible que observe que aparecen algunas ventanas nuevas. Estas ventanas pueden ayudar a la experiencia de depuración. Fíjese en la ventana Automático. En la ventana Automático se muestran los valores actuales de las variables que se han usado al menos tres líneas antes y hasta la línea actual.

Captura de pantalla de la ventana Automático 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. Puede modificar los valores de estas variables durante la depuración, para ver qué efecto tienen en el programa. En este caso, se dejan como están.

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. Para asegurarse de que la ventana del editor tiene el foco, haga clic en ella primero.

Vídeo que muestra una información sobre herramientas que aparece al mantener el puntero sobre la variable y. Muestra el valor actual de y, que es 0.

Continuar la depuración

  1. La flecha de color amarillo de la izquierda muestra el punto de ejecución actual. La línea actual llama a Calculate; por tanto, presione F11 para Depurar paso a paso por instrucciones la función, lo que le lleva al cuerpo de la función Calculate. Tenga cuidado con Depurar paso a paso por instrucciones, ya que realiza esta acción en cualquier función de la línea en la que se encuentre, incluidas las funciones de biblioteca estándar. Es adecuado depurar la biblioteca estándar paso a paso por instrucciones, pero puede que le interese centrarse en su código en lugar de en el código de biblioteca.

  2. Ahora que el punto de ejecución está al principio de la función Calculate, presione F10 para pasar a la línea siguiente en la ejecución del programa. F10 también se conoce como Depurar paso a paso por procedimientos. Se puede usar Depurar paso a paso por procedimientos para pasar de una línea a otra, sin profundizar en los detalles de lo que ocurre en cada elemento de la línea. En general, se debe usar Depurar paso a paso por procedimientos en lugar de Depurar paso a paso por instrucciones, a menos que quiera profundizar más en el código que se llama desde otra parte (como hizo para llegar al cuerpo de Calculate).

  3. Siga presionando F10 para Depurar paso a paso por procedimientos cada línea hasta que regrese a la función main() del otro archivo, y deténgase en la línea cout.

    Vídeo en el que se muestra cómo recorrer cada línea de código en la función Calculate.

    Cada línea de código de la función Calculate se pasa por alto hasta que el control vuelve a la función principal. A continuación, el usuario mantiene el puntero sobre la variable denominada result para ver su valor, que es: inf".

    El programa está haciendo lo que se espera: toma el primer número y lo divide por segundo. En la línea cout, mantenga el puntero sobre la variable result o examine result en la ventana Automático. Su valor es inf, que no parece correcto, por lo que vamos a corregirlo. En la línea cout solo se muestra el valor almacenado en result, por lo que al avanzar una línea más mediante F10, en la ventana de consola se muestra:

    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.

    Salida de la aplicación: escriba la operación que se va a realizar. Formato: a+b | a-b | a*b | a/b. El usuario especificó entre 5 y 0. La salida de la aplicación: El resultado es: 5. El usuario especificó el 10/0. La salida de la aplicación: Result is: 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 abordar la división por cero de manera más eficaz para que sea más fácil para el usuario comprender el problema.

  1. Realice los siguientes cambios 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 instrucción if después de cin >> x >> oper >> y; para comprobar la división por cero y generar un mensaje para el 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 detenerse para solicitar la entrada del usuario. Vuelva a escribir 10 / 0. Ahora, se imprime un mensaje más útil. Al usuario se le solicita una entrada adicional y el programa se continúa ejecutando con normalidad.

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

    Nota:

    Cuando se edita código en modo de depuración, hay riesgo de que se vuelva obsoleto. Esto sucede cuando el depurador sigue ejecutando el código antiguo y todavía no se ha actualizado con los cambios. El depurador abre un cuadro de diálogo en el que se le informará cuando esto ocurra. En ocasiones, es posible que deba 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 ella, depúrela paso a paso por procedimientos y después vuelva a acceder a la función para obtener el código actualizado. Si por algún motivo eso no funciona y ve un mensaje de error, puede detener la depuración si hace clic en el cuadrado de color rojo de la barra de herramientas situada bajo los menús de la parte superior del IDE y después presionar F5 o hacer clic en la flecha "Reproducir" de color verde situada junto al botón de detención en la barra de herramientas para volver a iniciar la depuración.

    Otro motivo por el que puede producirse un error en la edición y continuar es que necesita ir al menú principal y seleccionar Opciones de>herramientas>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 Ejecutar y Depurar

    • Mediante F5 (o Depurar>Iniciar depuración) se inicia una sesión de depuración si todavía no hay ninguna activa, y se ejecuta el programa hasta que se alcanza un punto de interrupción o el programa necesita la entrada del usuario. Si no se necesita la entrada del usuario y no hay ningún punto de interrupción disponible, el programa finaliza y la ventana de la consola se cierra de forma automática cuando el programa termina de ejecutarse. Si tiene algo parecido a un programa "Hola mundo" para ejecutar, use Ctrl+F5 o establezca un punto de interrupción antes de presionar F5 para mantener la ventana abierta.
    • Mediante Ctrl+F5 (o Depurar>Iniciar sin depurar) se ejecuta la aplicación sin entrar en modo de depuración. Esto es ligeramente 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 Depurar paso a paso por procedimientos) permite iterar por el código línea a línea y visualizar cómo se ejecuta y cuáles son los valores de variable en cada paso de la ejecución.
    • F11 (conocido como Depurar paso a paso por instrucciones) funciona de forma similar a Depurar paso a paso por procedimientos, con la excepción de que depura paso a paso por procedimientos las funciones a las que se llama en la línea de ejecución. Por ejemplo, si la línea que se está ejecutando llama a una función, al presionar F11 el puntero se desplaza al cuerpo de la función, para que pueda seguir la ejecución del código de la función antes de volver a la línea de partida. Al presionar F10 la llamada de función se depura paso a paso por instrucciones y simplemente pasa a la línea siguiente; la llamada de función se sigue produciendo, pero el programa no se detiene para mostrarle lo que está haciendo.

Cierre la aplicación

  • Si sigue en ejecución, cierre la ventana de la consola de la aplicación de calculadora.

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++