Criar uma calculadora de console em C++

O ponto de partida habitual para um programador C++ é um aplicativo "Olá, mundo!" que é executado na linha de comando. Começa com essa aplicação neste artigo e depois passa para algo mais desafiante: uma aplicação de calculadora.

Pré-requisitos

  • Visual Studio com a carga de trabalho Desenvolvimento de ambiente de trabalho com C++ instalada. Para mais informações, consulte Install suporte a C++ em Visual Studio.
  • Este tutorial demonstra uma funcionalidade chamada editar e continuar , que permite fazer alterações ao seu código enquanto a aplicação está a correr. Para ativar editar e continuar, no menu principal selecione Ferramentas>Opções>de Depuração>Geral e selecione Exigir ficheiros fonte para corresponder exatamente à versão original.

Crie seu projeto de aplicativo

Visual Studio usa projetos para organizar o código para um aplicativo e soluções para organizar um ou mais projetos. Um projeto contém as opções, configurações e regras usadas para construir uma aplicação. Também gere a relação entre os ficheiros do projeto e quaisquer ficheiros externos. Para criar seu aplicativo, primeiro, crie um novo projeto e solução.

  1. Inicie o Visual Studio. Aparece o diálogo Iniciar do Visual Studio. Selecione Criar um novo projeto.

    Captura de ecrã do diálogo que aparece quando Visual Studio começa com Criar um novo projeto destacado.

    A caixa de diálogo tem opções para clonar um repositório, abrir um projeto ou solução, abrir uma pasta local e criar um novo projeto."

  2. No diálogo Criar um novo projeto, defina a linguagem para C++, defina a plataforma para Windows, selecione Console App da lista de tipos de projeto, depois selecione Next.

    Captura de ecrã do Visual Studio Criar um novo diálogo de projeto com a aplicação de consola destacada.

    A linguagem está definida para C++, a plataforma está definida para Windows e tipos de projeto como Empty Project, Console App, CMake Project e Windows Desktop Wizard aparecem na lista de tipos de projeto.

    Importante

    Certifique-se de selecionar a versão C++ do modelo Aplicativo de Console . Ele tem as tags C++, Windows e Console e o ícone tem "++" no canto.

  3. Em Configura o teu novo project, seleciona a caixa de texto Project nome, nomeia o teu novo project CalculatorTutorial e depois seleciona Criar.

    Captura de ecrã do Visual Studio Configure o seu novo diálogo de projeto, que tem campos para nome do projeto, localização do projeto e nome da Solução.

    É criada uma aplicação vazia de consola C++ para Windows chamada "Hello World". Os aplicativos de console usam uma janela do console do Windows para exibir a saída e aceitar a entrada do usuário. No Visual Studio, uma janela do editor é aberta e mostra o código gerado:

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

Verifique se o novo aplicativo é compilado e executado

O modelo para um novo aplicativo de console do Windows cria um aplicativo C++ simples "Hello World". Neste ponto, você pode ver como o Visual Studio cria e executa os aplicativos criados diretamente do IDE.

  1. Para construir o seu projeto, no menu Build , selecione Build Solution. A janela Saída mostra os resultados do processo de compilação.

    Captura de ecrã da janela de Saída Visual Studio, mostrando uma mensagem a indicar que a compilação foi bem-sucedida.

  2. Para executar o código, na barra de menus, selecione Depurar>Iniciar sem depuração (Ctrl+F5).

    Captura de tela do Visual Studio Debug Console exibindo a saída do aplicativo: Hello World!

    Uma janela do console é aberta e seu aplicativo é executado dentro dela.

    Quando você inicia um aplicativo de console no Visual Studio, ele executa seu código e, em seguida, imprime "Pressione qualquer tecla para fechar esta janela . . ." para lhe dar a oportunidade de ver o resultado.

    Parabéns! Você criou seu primeiro aplicativo de console "Olá, mundo!" no Visual Studio!

  3. Pressione uma tecla para descartar a janela do console e retornar ao Visual Studio.

Agora você tem as ferramentas para criar e executar seu aplicativo após cada alteração, para verificar se o código ainda funciona como você espera. Mais tarde, aprendes a depurar o código, se este não funcionar.

Editar o código

Agora modifica o código deste modelo para que seja uma aplicação de calculadora.

  1. Substitua o CalculatorTutorial.cpp conteúdo do arquivo pelo código a seguir para que ele corresponda a este exemplo:

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

    Entendendo o código:

    • A #include instrução traz código em outros arquivos. Por vezes, pode ver um nome de ficheiro rodeado por colchetes angulares como <iostream>. Os colchetes angulares instruem o compilador a procurar o iostream arquivo de cabeçalho primeiro nos diretórios padrão do sistema e, se não for encontrado, procurar em diretórios específicos para o projeto. Noutras ocasiões, pode ver um nome de ficheiro rodeado de aspas como "someHeader.h". As aspas instruem o compilador a pular a procura nos diretórios padrão do sistema e, em vez disso, procurar apenas em diretórios específicos para o projeto.
    • O using namespace std; diz ao compilador para esperar que o código da biblioteca padrão C++ seja usado neste arquivo. Sem esta linha, cada palavra-chave da biblioteca teria de ser precedida de std:: para indicar o seu âmbito. Por exemplo, sem essa linha, cada referência a cout seria escrita como std::cout. A using instrução é adicionada para tornar mais conveniente acessar o código em outro namespace.
    • A cout palavra-chave é usada para imprimir na saída padrão em C++. O << operador diz ao compilador para enviar o que estiver à direita dele para a saída padrão.
    • A endl palavra-chave é como a tecla Enter. Termina a linha e move o cursor para a linha seguinte. É uma prática melhor colocar um \n dentro da string (contida por "") para fazer a mesma coisa, porque endl sempre libera o buffer, o que pode prejudicar o desempenho do programa. Como esta é uma aplicação muito pequena, endl é usada em vez disso.
    • Todas as instruções C++ devem terminar com ponto-e-vírgula e todos os aplicativos C++ devem conter uma main() função. Esta função é o que o programa executa no início. Todo o código deve estar acessível a partir de main() para ser usado.
  2. Para guardar o ficheiro, pressione Ctrl+S ou selecione o ícone do disquete na barra de ferramentas sob a barra de menus.

  3. Para executar a aplicação, pressione Ctrl+F5 ou vá ao menu Depurar e selecione Iniciar Sem Depuração. Deverias ver aparecer uma janela de consola.

  4. Feche a janela do console quando terminar.

Adicionar código para fazer algumas contas

Uma classe é como um plano para um objeto que faz algo. Neste caso, defina uma classe calculadora para conter a lógica matemática.

Adicionar uma classe de calculadora

  1. Vá para o menu Projeto e selecione Adicionar classe. Em Nome da Classe, introduza Calculadora. Selecione OK.

    Captura de tela da caixa de diálogo Adicionar classe do Visual Studio.

    O campo de nome da classe contém a calculadora de texto. O campo de arquivo .h contém Calculator.h. O campo de arquivo .cpp contém Calculator.cpp. O campo de classe base está vazio. As opções para inline e Managed estão desmarcadas.

    Dois novos arquivos são adicionados ao seu projeto. Para guardar todos os ficheiros alterados de uma vez, pressione Ctrl+Shift+S. É um atalho de teclado para Ficheiro>Guardar Tudo. Há também um botão da barra de ferramentas para Salvar tudo, um ícone de dois disquetes, encontrado ao lado do botão Salvar . Em geral, é uma boa prática fazer Salvar tudo com frequência, para que você não deixe de salvar nenhuma alteração.

    A caixa de diálogo Adicionar Classe cria .h ficheiros .cpp com o mesmo nome da classe. Você pode ver uma lista completa de seus arquivos de projeto na janela Gerenciador de Soluções , visível na lateral do IDE. Se a janela não estiver visível, abra-a na barra de menu selecionando View>Explorador de Soluções.

    Captura de tela da janela Gerenciador de Soluções do Visual Studio.

    O projeto tutorial da calculadora tem um nó de arquivos de cabeçalho contendo o Calculator.h. Um nó Arquivos de código-fonte contém Calculator.cpp e CalculatorTutorial.cpp. Os nós para referências, dependências externas e arquivos de recursos são visíveis, mas fechados.

    Você pode abrir um arquivo clicando duas vezes nele na janela Gerenciador de Soluções . Para abrir Calculator.h, clique duas vezes.

  2. Substitua o conteúdo do Calculator.h pelo código a seguir para que o arquivo agora tenha esta aparência:

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

    Compreender o código

    • Este código declara uma nova função chamada Calculate, que lida com operações matemáticas para adição, subtração, multiplicação e divisão.
    • O código C++ é organizado em arquivos de cabeçalho (.h) e arquivos de origem (.cpp). Algumas outras extensões de arquivo são suportadas por vários compiladores, mas estes são os principais a saber. Funções e variáveis são normalmente declaradas, isto é, dado um nome e um tipo, em arquivos de cabeçalho, e implementadas, ou dadas uma definição, em arquivos de origem. Para acessar o código definido em outro arquivo, você pode usar #include "filename.h", onde filename.h é o nome do arquivo que declara as variáveis ou funções que você deseja usar.
    • É uma boa prática organizar seu código em diferentes arquivos com base no que ele faz, para que seja fácil encontrar o código de que você precisa mais tarde. Neste caso, defines a Calculator classe separadamente do ficheiro que contém a main() função, mas planeias referenciar a Calculator classe em main().
  3. Um rabisco verde aparece abaixo Calculate porque, embora a Calculate função seja declarada, ela não está definida. Passe o cursor sobre Calculate, selecione a seta para baixo no ícone da chave de fendas e selecione Criar definição de 'Calcular' em Calculator.cpp.

    Captura de ecrã de uma chave de fendas na janela do editor de Visual Studio com a opção 'Criar definição de Calcular em Calculator.cpp' destacada.

    Este código é adicionado a Calculator.cpp:

    Captura de tela do editor do Visual Studio mostrando a definição da função 'Calcular'.

    A definição da função é: calculadora dupla::Calculate( double x, char oper, double y) { return 0.0; }

    Atualmente, retorna apenas 0.0. Vamos mudar isso.

  4. Mude para o arquivo Calculator.cpp na janela do editor. Substitua o conteúdo do 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;
        }
    }
    

    Compreender o código

    • A função Calculate leva um número, um operador e um segundo número. Em seguida, ele executa a operação solicitada nos dois números.
    • A switch instrução verifica qual operador foi fornecido e executa o caso correspondente a essa operação. O default: caso serve como um fallback para o caso de o utilizador digitar um operador que não é tratado por nenhuma das instruções anteriores case. É melhor lidar com a entrada inválida do usuário de uma maneira mais elegante, mas isso está além do escopo deste tutorial.
    • A double palavra-chave indica um tipo de número que suporta decimais. Este tipo de número é chamado de número de ponto flutuante e double significa um número de ponto flutuante com precisão adicional. Desta forma, a calculadora pode lidar com matemática decimal e matemática inteira. A Calculate função é obrigada a devolver sempre um número de ponto flutuante de dupla precisão devido ao double no início do código (isto denota o tipo de retorno da função), razão pela qual o programa retorna 0,0 no caso padrão.
    • O .h arquivo declara o protótipo da função, que informa ao compilador antecipadamente quais parâmetros ele requer e qual tipo de retorno esperar dele. O .cpp arquivo tem todos os detalhes de implementação da função.

Se você compilar e executar o código novamente neste ponto, ele será encerrado imediatamente depois de perguntar qual operação executar. Então, modifique a main função para fazer vários cálculos.

Chamar as funções de membro da Calculator classe

  1. Atualize a função main em CalculatorTutorial.cpp da seguinte forma:

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

    Compreender o código

    • Como os programas C++ começam sempre na main() função, é necessário chamar outro código a partir daí, por isso é necessária uma #include instrução para tornar esse código visível para a nossa main() função.
    • As variáveis x, y, oper, e result são declaradas para armazenar o primeiro número, o segundo número, o operador e o resultado final, respectivamente. É sempre uma boa prática dar-lhes alguns valores iniciais para evitar comportamentos indefinidos, que é o que é feito aqui.
    • A Calculator c; linha declara um objeto nomeado c como uma instância da Calculator classe. A aula em si é apenas um modelo de como as calculadoras funcionam. O objeto é a calculadora específica que faz as contas.
    • A while (true) instrução é um loop. O código dentro do ciclo repete-se repetidamente enquanto a condição dentro do () se mantiver verdadeira. Como a condição é simplesmente listada como true, é sempre verdade, então o loop é executado para sempre. Para fechar o programa, o usuário deve fechar manualmente a janela do console. Caso contrário, o programa sempre aguarda por novas entradas.
    • A cin palavra-chave aceita a entrada do usuário. O fluxo de entrada é inteligente o suficiente para processar uma linha de texto inserida na janela do console e colocá-la dentro de cada uma das variáveis listadas, em ordem.
    • A c.Calculate(x, oper, y); expressão chama a Calculate função definida anteriormente e fornece os valores de entrada inseridos e a operação solicitada. Em seguida, a função retorna um número armazenado no result.
    • Finalmente, result é impresso no console e o usuário vê o resultado do cálculo.

Crie e teste o código novamente

Agora teste o programa novamente para se certificar de que tudo funciona corretamente.

  1. Prima Ctrl+F5 para reconstruir e iniciar a aplicação.

  2. Digite 5+5e pressione Enter. Verifique se o resultado é 10.

    Captura de tela de uma janela de comando mostrando os resultados da execução do programa.

    O aplicativo emite a mensagem: Insira a operação a ser executada. Formato: a+b | a-b | a*b | a/b. O usuário digitou 5+5. A saída do aplicativo: Resultado de 5+5 é: 10

  3. Pare o programa fechando a janela do console.

Depurar o aplicativo

Como o utilizador pode escrever qualquer coisa na janela da consola, certifique-se de que a calculadora gere entradas inesperadas. Em vez de correr o programa, depura-o para veres o que está a fazer passo a passo.

Corra a aplicação no depurador

  1. No CalcuatorTutorial.cpp, defina um ponto de interrupção na linha: result = c.Calculate(x, oper, y);. Para definir o ponto de interrupção, selecione ao lado da linha na barra vertical ao longo da borda esquerda da janela do editor para que apareça um ponto vermelho.

    Captura de tela do editor do Visual Studio. Um ponto vermelho representando um ponto de interrupção aparece na linha: result = c.Calculate(x, oper, y).

    Agora, quando depuras o programa, a execução pausa nessa linha. Já tens uma ideia geral de que o programa funciona para casos simples. Como não queres pausar a execução sempre que chamares Calculate(), torna o ponto de interrupção condicional.

  2. Clique com o botão direito do mouse no ponto vermelho que representa o ponto de interrupção e selecione Condições. Na caixa de edição da condição, digite (y == 0) && (oper == '/'). Selecione Fechar para guardar a condição do ponto de interrupção.

    Captura de ecrã de um ponto de interrupção definido.

    O ponto de interrupção está na linha: resultado = c ponto Calcular ( x, oper, y). «Condições...» A opção Condição está marcada. O menu suspenso Condições está definido para "Expressão condicional". A lista suspensa de condições é definida como "É verdadeiro". A condição é definida como y == 0 && oper == '/'.

    Agora, a execução pausa no ponto de interrupção quando o aplicativo tenta dividir por 0.

  3. Para depurar o programa, pressione F5 ou selecione o botão da barra de ferramentas do Depurador Local do Windows que tem o ícone de seta verde. Na tua aplicação de consola, se inserires algo como 5 - 0, o programa comporta-se normalmente e continua a correr. No entanto, se introduzires 10 / 0, a execução pausa no ponto de interrupção. Você pode colocar qualquer número de espaços entre o operador e números: cin é inteligente o suficiente para analisar a entrada adequadamente.

    Captura de ecrã de Visual Studio editor com a execução do programa parada no ponto de interrupção condicional na linha: resultado = c.Calculate(x, oper, y);.

Janelas úteis no depurador

Quando depuras o teu código, podes notar que aparecem algumas janelas novas. Essas janelas podem melhorar a sua experiência de depuração. Olhe para a Autos janela. A janela Autos mostra os valores atuais das variáveis usadas pelo menos três linhas antes e até a linha atual. Se você não vir a janela Autos , no menu principal, selecione Depurar>Windows>Autos.

Captura de ecrã da janela Autos do depurador do Visual Studio.

O valor de oper é 47 '/', resultado é 5, x é 10 e y é 0.

Para ver todas as variáveis dessa função, alterne para a janela Locais . Como esta função é pequena, as janelas Autos e Locais mostram as mesmas variáveis. Podes modificar os valores destas variáveis na janela Locais durante a depuração para ver que efeito teriam no programa. Neste caso, deixa-os em paz. Abra a janela Locais selecionando Locais na parte inferior da janela Automáticos ou selecionando no menu principal Depurar>Locais do>.

Captura de tela da janela Locais no Visual Studio, exibindo os valores atuais de variáveis locais durante a depuração.

O valor de oper é 47 '/', o resultado é 0, x é 10 e y é 0.

Você também pode passar o mouse sobre variáveis no código para ver seus valores atuais no ponto em que a execução está pausada no momento. Certifica-te de que a janela do editor está focada selecionando-a primeiro.

Captura de tela de uma dica de ferramenta mostrando o valor da variável 'oper', que é 47 ou '/'.

Continuar a depuração

  1. A seta amarela à esquerda mostra o ponto atual de execução. A linha atual chama Calculate, então pressione F11 para entrar na função. Agora você está executando código no corpo da Calculate função. Tenha cuidado com o Step Into porque ele entra em todas as funções na linha em que você está, incluindo funções padrão da biblioteca. Não há problema em entrar na biblioteca padrão, mas talvez estejas mais interessado em focar-te no teu código do que no código da biblioteca.

  2. Agora que o ponto de execução está no início da Calculate função, pressione F10 para passar para a próxima linha na execução do programa. F10 também é conhecido como Step Over. Você pode usar Step Over para mover de linha em linha, sem se aprofundar nos detalhes do que está ocorrendo em cada parte da linha. Em geral, deves usar Step Over em vez de Step Into, a menos que queiras analisar mais a fundo o código que está a ser chamado a partir de outro ponto, tal como fizeste para chegar ao corpo de Calculate.

  3. Continue usando F10 para avançar cada linha até voltar para a main() função no outro ficheiro e parar na cout linha.

    O programa está a fazer o que esperas: pega no primeiro número e divide-o pelo segundo. Na cout linha, passe o mouse sobre a result variável ou dê uma olhada no result na janela Autos. Seu valor é inf, o que não parece certo.

    Captura de tela da depuração da calculadora.

    A instrução atual no depurador é cout << "Result is: " << result << endl; Na janela autos, o resultado é inf.

    Tu consegues resolver isso. A cout linha produz o valor armazenado em result. Quando avança mais uma linha usando F10, a janela da consola mostra:

    Captura de tela do Visual Studio Debug Console exibindo o resultado de uma operação de divisão por zero.

    O aplicativo indica: Insira a operação a realizar. Formato: a+b | a-b | a*b | a/b. O utilizador introduziu 5-0. A saída da aplicação: O resultado é: 5. O usuário digitou 10/0. A saída do aplicativo: O resultado é: inf

    Esse resultado ocorre porque a divisão por zero é indefinida, de modo que o programa não tem uma resposta numérica para a operação solicitada.

Corrigir o erro "dividir por zero"

Consegues lidar com a divisão por zero de forma mais elegante para que seja mais fácil para o utilizador compreender o problema.

  1. Faça as seguintes alterações no CalculatorTutorial.cpp. Você pode deixar o programa em execução enquanto edita, graças a um recurso de depurador chamado Editar e Continuar. Adicione uma if instrução a seguir cin >> x >> oper >> y; para verificar a divisão por zero e envie uma mensagem para o usuário se isso acontecer. Caso contrário, o resultado é impresso.

    // 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. Pressione F5 uma vez. A execução do programa continua até que ele tenha que pausar para solicitar a entrada do usuário. Entre 10 / 0 novamente. Agora, uma mensagem mais útil é impressa. O utilizador é solicitado a fornecer mais informações, e o programa continua a executar-se normalmente.

    Captura de tela de uma janela do console mostrando a saída final após a implementação de alterações para lidar com a divisão por zero.

    A janela do console exibe duas linhas: 10 / 0 Resultado é: inf, seguido por, 10 / 0 Erro matemático: Tentativa de dividir por zero.

    Observação

    Quando você edita o código enquanto está no modo de depuração, há um risco de o código ficar obsoleto. Isso acontece quando o depurador ainda está executando seu código antigo e ainda não o atualizou com suas alterações. O depurador exibe uma janela de diálogo para informar quando isso acontecer. Por vezes, tens de carregar em F5 para atualizar o código que está a ser executado.

    Em particular, se você fizer uma alteração dentro de uma função enquanto o ponto de execução está dentro dessa função, você precisa sair da função e, em seguida, voltar para ela novamente para obter o código atualizado. Se isso não funcionar e vir uma mensagem de erro, selecione o quadrado vermelho para parar a depuração e, em seguida, inicie novamente a depuração premindo F5 ou escolhendo a seta verde junto ao botão Parar na barra de ferramentas.

    Outra razão pela qual editar e continuar pode falhar é se você vir uma mensagem que diz "A configuração Exigir que os arquivos de origem correspondam exatamente à versão original em Debug-Options-General>> precisa ser habilitada..." Para corrigir isso, no menu principal, selecione Ferramentas>Opções>Depuração>Geral e verifique se a opção Exigir que os arquivos de origem correspondam exatamente à versão original está marcada.

    Noções básicas sobre os atalhos Executar e Depurar

    • F5, ou Debug>Start Debugging, inicia uma sessão de depuração, se ainda não estiver ativa, e executa o programa até que um ponto de interrupção seja atingido ou o programa precise da entrada do usuário. Se nenhuma entrada do usuário for necessária e nenhum ponto de interrupção estiver disponível para ser atingido, o programa será encerrado e a janela do console se fechará quando o programa terminar de ser executado. Se o seu programa enviar para a consola, use Ctrl+F5 ou defina um ponto de interrupção antes de pressionar F5 para manter a janela aberta.
    • Ctrl+F5, ou Debug>Start Without Debugging, executa a aplicação sem entrar em modo de depuração. Isso é um pouco mais rápido do que a depuração, e a janela do console permanece aberta depois de o programa terminar de ser executado.
    • F10, conhecido como Step Over, permite iterar através do código, linha por linha, e visualizar como o código é executado e quais valores de variáveis estão em cada etapa de execução.
    • F11, conhecido como Step Into, funciona de forma semelhante ao Step Over, exceto que entra em quaisquer funções chamadas na linha de execução. Por exemplo, se a linha que está sendo executada chamar uma função, pressionar F11 move o ponteiro para o corpo da função, para que você possa seguir o código da função que está sendo executado antes de voltar para a linha em que você começou. Pressionando F10 executa a chamada de função e apenas se move para a próxima linha; a chamada da função ainda ocorre, mas o programa não pausa para mostrar o que está a fazer.

Fechar a aplicação

  • Se ainda estiver em execução, feche a janela do console para parar o aplicativo da calculadora.

Adicionar controle de origem do Git

Depois de criares uma aplicação, talvez queiras adicioná-la a um repositório Git. Temos tudo tratado. O Visual Studio facilita esse processo com as ferramentas Git que você pode usar diretamente do IDE.

Sugestão

O Git é o sistema de controle de versão moderno mais utilizado. Quer sejas um programador profissional ou estejas a aprender a programar, o Git pode ser útil. Se és novo no Git, o site do Git é um bom ponto de partida. Lá, você pode encontrar cheat sheets, um livro online popular e vídeos do Git Basics.

Para associar seu código ao Git, você começa criando um novo repositório Git onde seu código está localizado.

  1. Na barra de status no canto inferior direito do Visual Studio, selecione Adicionar ao controle do código-fonte e, em seguida, selecione Git.

    Captura de tela dos botões de controle do código-fonte do Git abaixo do painel Gerenciador de Soluções, com o botão Adicionar ao Controle do Código-Fonte realçado.

  2. No diálogo Criar um repositório Git, inicie sessão no GitHub.

    Captura de tela da janela de diálogo Criar um repositório Git onde você cria um novo repositório GitHub.

    O nome do repositório é preenchido automaticamente com base na localização da pasta. Por padrão, seu novo repositório é privado, o que significa que você é o único que pode acessá-lo.

    Sugestão

    Quer seu repositório seja público ou privado, é melhor ter um backup remoto do seu código armazenado com segurança no GitHub. Mesmo que você não esteja trabalhando com uma equipe, um repositório remoto disponibiliza seu código para você em qualquer computador.

  3. Selecione Criar e Enviar.

    Depois de criar o repositório, os detalhes de status aparecem na barra de status.

    Captura de tela da barra de status do repositório localizada abaixo do painel Gerenciador de Soluções do Visual Studio, mostrando o nome da ramificação e o número de alterações pendentes.

    O primeiro ícone com as setas mostra o número de commits de saída/entrada na sua branch atual. Você pode usar este ícone para puxar quaisquer confirmações de entrada ou enviar quaisquer confirmações de saída. Você também pode optar por visualizar esses commits primeiro. Para fazer isso, selecione o ícone e, em seguida, selecione Exibir saída/entrada.

    O segundo ícone com o lápis mostra o número de alterações não confirmadas no seu código. Você pode selecionar esse ícone para visualizar essas alterações na janela Git Changes.

Para saber mais sobre como usar o Git com seu aplicativo, consulte a documentação de controle de versão do Visual Studio.

A aplicação concluída

Parabéns! Você concluiu o código para o aplicativo de calculadora, criou-o e depurou-o e adicionou-o a um repositório, tudo no Visual Studio.

Passo seguinte

Saiba mais sobre o Visual Studio para C++

O ponto de partida habitual para um programador C++ é um aplicativo "Olá, mundo!" que é executado na linha de comando. Começa com essa aplicação neste artigo e depois passa para algo mais desafiante: uma aplicação de calculadora.

Pré-requisitos

Crie seu projeto de aplicativo

Visual Studio usa projetos para organizar o código para um aplicativo e soluções para organizar um ou mais projetos. Um projeto contém as opções, configurações e regras usadas para construir uma aplicação. Também gere a relação entre os ficheiros do projeto e quaisquer ficheiros externos. Para criar seu aplicativo, primeiro, crie um novo projeto e solução.

  1. No menu do Visual Studio, selecione File>Novo>Project. A janela Novo projeto é aberta.

  2. Na barra lateral esquerda, verifique se o Visual C++ está selecionado. No centro, selecione Aplicativo de console.

  3. Na caixa de Nome no fundo, nomeie o novo projeto CalculatorTutorial e depois selecione OK.

    Captura de ecrã da caixa de diálogo Novo Projeto.

    À esquerda, Outros idiomas > Visual C++ está selecionado. No centro, o tipo de projeto Aplicação de Consola é selecionado. A caixa de texto Nome contém CalculatorTutorial.

    É criada uma aplicação vazia de consola C++ para Windows chamada "Hello World". Os aplicativos de console usam uma janela do console do Windows para exibir a saída e aceitar a entrada do usuário. No Visual Studio, uma janela do editor é aberta e mostra o código gerado:

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

Verifique se o novo aplicativo é compilado e executado

O modelo para um novo aplicativo de console do Windows cria um aplicativo C++ simples "Hello World". Neste ponto, você pode ver como o Visual Studio cria e executa os aplicativos criados diretamente do IDE.

  1. Para construir o seu projeto, no menu Build , selecione Build Solution. A janela Saída mostra os resultados do processo de compilação.

    Captura de tela da janela Saída do Visual Studio mostrando que a compilação foi bem-sucedida.

  2. Para executar o código, na barra de menus, selecione Debug, Start without debugging (Ctrl+F5).

    Captura de tela do Visual Studio Debug Console mostrando a saída: Hello World!

    Uma janela do console é aberta e seu aplicativo é executado dentro dela.

    Quando você inicia um aplicativo de console no Visual Studio, ele executa seu código e, em seguida, imprime Press any key to close this window . . . para dar a você a chance de ver a saída.

    Parabéns! Você criou seu primeiro aplicativo de console "Olá, mundo!" no Visual Studio!

  3. Pressione uma tecla para descartar a janela do console e retornar ao Visual Studio.

Agora você tem as ferramentas para criar e executar seu aplicativo após cada alteração, para verificar se o código ainda funciona como você espera. Mais tarde, aprendes a depurá-lo se não funcionar.

Editar o código

Agora modifica o código deste modelo para que seja uma aplicação de calculadora.

  1. Substitua o CalculatorTutorial.cpp conteúdo do arquivo pelo código a seguir para que ele corresponda a este exemplo:

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

    Entendendo o código:

    • A #include instrução traz código em outros arquivos. Por vezes, pode ver um nome de ficheiro rodeado por colchetes angulares como <iostream>. Os colchetes angulares instruem o compilador a procurar o iostream arquivo de cabeçalho primeiro nos diretórios padrão do sistema e, se não for encontrado, procurar em diretórios específicos para o projeto. Noutras ocasiões, pode ver um nome de ficheiro rodeado de aspas como "someHeader.h". As aspas instruem o compilador a pular a procura nos diretórios padrão do sistema e, em vez disso, procurar apenas em diretórios específicos para o projeto.
    • O using namespace std; diz ao compilador para esperar que o código da biblioteca padrão C++ seja usado neste arquivo. Sem esta linha, cada palavra-chave da biblioteca teria de ser precedida de std:: para indicar o seu âmbito. Por exemplo, sem essa linha, cada referência a cout seria escrita como std::cout. A using instrução é adicionada para tornar mais conveniente acessar o código em outro namespace.
    • A palavra-chave cout envia dados para a saída padrão em C++. O << operador diz ao compilador para enviar o que estiver à direita dele para a saída padrão.
    • A endl palavra-chave é como a tecla Enter. Termina a linha e move o cursor para a linha seguinte. É preferível colocar um \n dentro da string (contida por "") para fazer isso da mesma forma, porque endl sempre esvazia o buffer e pode prejudicar o desempenho do programa. Mas como este é um aplicativo muito pequeno, endl é usado em vez disso.
    • Todas as instruções C++ devem terminar com ponto-e-vírgula e todos os aplicativos C++ devem conter uma main() função. Esta função é o que o programa executa no início. Todo o código deve estar acessível a partir de main() para ser usado.
  2. Para guardar o ficheiro, pressione Ctrl+S ou selecione o ícone do disquete na barra de ferramentas sob a barra de menus.

  3. Para executar a aplicação, pressione Ctrl+F5 ou vá ao menu Depurar e selecione Iniciar Sem Depuração. Se surgir uma caixa de diálogo com a mensagem Este projeto está desatualizado, pode selecionar Não mostrar este diálogo novamente e, em seguida, selecionar Sim para compilar a sua aplicação. Você verá uma janela do console exibida com esta aparência:

    Captura de ecrã da aplicação calculadora em execução numa janela da consola.

    A aplicação da consola mostra a saída, que é: Aplicação Consola de Calculadora. Introduza a operação a realizar. Formato: a+b | a-b | a*b | a/b. O processo foi encerrado com o código 0 e há uma mensagem de que, para fechar automaticamente o console quando a depuração parar, ative Ferramentas > Opções > Depuração > Feche automaticamente o console quando a depuração parar. Por fim, há uma mensagem para pressionar qualquer tecla para fechar esta janela.

  4. Feche a janela do console quando terminar.

Adicionar código para fazer algumas contas

Uma classe é como um plano para um objeto que faz algo. Neste caso, defina uma classe calculadora para conter a lógica matemática.

Adicionar uma classe de calculadora

  1. Vá para o menu Projeto e selecione Adicionar classe. Na caixa de edição Nome da classe , digite Calculadora. Selecione OK.

    Captura de tela da caixa de diálogo Adicionar classe do Visual Studio.

    O campo de nome da classe contém a calculadora de texto. O campo de arquivo .h contém Calculator.h. O campo de arquivo .cpp contém Calculator.cpp. O campo de classe base está vazio. As opções para inline e Managed estão desmarcadas.

    Uma classe é como um plano para um objeto que faz algo. Neste caso, define uma calculadora e como deve funcionar.

    Dois novos arquivos são adicionados ao seu projeto. Para guardar todos os ficheiros alterados de uma vez, pressione Ctrl+Shift+S. É um atalho de teclado para Ficheiro>Guardar Tudo. Há também um botão da barra de ferramentas para Salvar tudo, um ícone de dois disquetes, encontrado ao lado do botão Salvar . Em geral, é uma boa prática fazer Salvar tudo com frequência, para que você não perca nenhum arquivo ao salvar.

    A caixa de diálogo Adicionar Classe cria .h ficheiros .cpp com o mesmo nome da classe. Você pode ver uma lista completa de seus arquivos de projeto na janela Gerenciador de Soluções , visível na lateral do IDE. Se o Gerenciador de Soluções não estiver visível, abra-o na barra de menus: selecione Exibir>Gerenciador de Soluções.

    Captura de tela da janela Gerenciador de Soluções do Visual Studio.

    O projeto tutorial da calculadora tem uma seção de ficheiros de cabeçalho que contém Calculator.h, stdafx.h e targetver.h. Um nó de ficheiros de código-fonte contém Calculator.cpp, CalculatorTutorial.cpp e stdafx.cpp. Os nós para referências, dependências externas e arquivos de recursos são visíveis, mas fechados.

    Você pode abrir um arquivo clicando duas vezes nele na janela Gerenciador de Soluções . Para abrir Calculator.h, clique duas vezes.

  2. Substitua o conteúdo do Calculator.h código seguinte para que o ficheiro agora fique assim:

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

    Compreender o código

    • Este código declara uma nova função chamada Calculate, que lida com operações matemáticas para adição, subtração, multiplicação e divisão.
    • O código C++ é organizado em arquivos de cabeçalho (.h) e arquivos de origem (.cpp). Algumas outras extensões de arquivo são suportadas por vários compiladores, mas estes são os principais a saber. Funções e variáveis são normalmente declaradas, isto é, dado um nome e um tipo, em arquivos de cabeçalho, e implementadas, ou dadas uma definição, em arquivos de origem. Para acessar o código definido em outro arquivo, você pode usar #include "filename.h", onde filename.h é o nome do arquivo que declara as variáveis ou funções que você deseja usar.
    • É uma boa prática organizar seu código em diferentes arquivos com base no que ele faz, para que seja fácil encontrar o código de que você precisa mais tarde. Neste caso, defines a Calculator classe separadamente do ficheiro que contém a main() função, mas referencias a Calculator classe em main().
  3. Um rabisco verde aparece abaixo Calculate porque, embora a Calculate função seja declarada, ela não está definida. Passe o cursor sobre Calculate, selecione a seta para baixo na lâmpada e selecione Criar definição de 'Calcular' em Calculator.cpp. Aparece um pop-up que lhe dá uma espiada da alteração de código que foi feita no outro ficheiro. O código foi adicionado ao Calculator.cpp.

    O vídeo mostra o uso da lista suspensa do ícone de lâmpada para selecionar a opção Criar definição de Calculate no arquivo Calculator.cpp.

    Atualmente, retorna apenas 0.0. Vamos mudar isso. Pressione Esc para fechar o pop-up e escolha Sim para salvar as alterações.

  4. Mude para o arquivo Calculator.cpp na janela do editor. Substitua o conteúdo do arquivo pelo seguinte código:

    #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;
        }
    }
    

    Compreender o código

    • A função Calculate leva um número, um operador e um segundo número. Em seguida, ele executa a operação solicitada nos dois números.
    • A switch instrução verifica qual operador foi fornecido e executa o caso correspondente a essa operação. O default: caso serve como um fallback para o caso de o utilizador digitar um operador que não é tratado por nenhuma das instruções anteriores case. É melhor lidar com a entrada inválida do usuário de uma maneira mais elegante, mas isso está além do escopo deste tutorial.
    • A double palavra-chave indica um tipo de número que suporta decimais. Este tipo de número é chamado de número de ponto flutuante e double significa um número de ponto flutuante com precisão adicional. Desta forma, a calculadora pode lidar com matemática decimal e matemática inteira. A Calculate função é obrigada a devolver sempre um número de ponto flutuante de dupla precisão devido ao double no início do código (isto denota o tipo de retorno da função), razão pela qual o programa retorna 0,0 no caso padrão.
    • O .h arquivo declara o protótipo da função, que informa ao compilador antecipadamente quais parâmetros ele requer e qual tipo de retorno esperar dele. O .cpp arquivo tem todos os detalhes de implementação da função.

Se você compilar e executar o código novamente neste ponto, ele ainda será encerrado depois de perguntar qual operação executar. Em seguida, modifique a main função para fazer alguns cálculos.

Invocar as funções de membro da classe Calculadora

  1. Atualize a função main em CalculatorTutorial.cpp da seguinte forma:

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

    Compreender o código

    • Como os programas em C++ começam sempre na main() função, tens de chamar o nosso outro código a partir daí, por isso é necessária uma #include instrução para tornar esse código visível para a nossa main() função.
    • As variáveis x, y, oper, e result são declaradas para armazenar o primeiro número, o segundo número, o operador e o resultado final, respectivamente. É sempre uma boa prática dar-lhes alguns valores iniciais para evitar comportamentos indefinidos, que é o que é feito aqui.
    • A Calculator c; linha declara um objeto nomeado c como uma instância da Calculator classe. A aula em si é apenas um modelo de como as calculadoras funcionam; O objeto é a calculadora específica que faz as contas.
    • A while (true) instrução é um loop. O código dentro do loop é executado repetidamente, desde que a condição dentro do () mantenha true. Como a condição é simplesmente listada como true, é sempre verdade, então o loop é executado para sempre. Para fechar o programa, o usuário deve fechar manualmente a janela do console. Caso contrário, o programa sempre aguarda por novas entradas.
    • A cin palavra-chave aceita a entrada do usuário. O fluxo de entrada é inteligente o suficiente para processar uma linha de texto inserida na janela do console e colocá-la dentro de cada uma das variáveis listadas, em ordem.
    • A c.Calculate(x, oper, y); expressão chama a Calculate função definida anteriormente e fornece os valores de entrada inseridos e a operação solicitada. Em seguida, a função retorna um número armazenado no result.
    • Finalmente, result é impresso no console e o usuário vê o resultado do cálculo.

Crie e teste o código novamente

Teste o programa novamente para se certificar de que tudo funciona corretamente.

  1. Prima Ctrl+F5 para recompilar e iniciar a aplicação.

  2. Digite 5+5e pressione Enter. Verifique se o resultado é 10.

    Captura de ecrã de uma janela de comandos a correr a aplicação Calculadora, mostrando que o resultado de 5 + 5 é 10.

  3. Pare o programa fechando a janela do console.

Depurar o aplicativo

Como o utilizador pode escrever qualquer coisa na janela da consola, certifique-se de que a calculadora gere entradas inesperadas. Em vez de correr o programa, depura-o para veres o que está a fazer passo a passo.

Corra a aplicação no depurador

  1. No CalcuatorTutorial.cpp, defina um ponto de interrupção na result = c.Calculate(x, oper, y); linha. Para definir o ponto de interrupção, selecione ao lado da linha na barra vertical cinzenta ao longo da borda esquerda da janela do editor para que apareça um ponto vermelho.

    Captura de tela do usuário definindo um ponto de interrupção na linha 23: result = c.Calculate(x, oper, y);.

    Agora, quando depuras o programa, ele sempre pausa a execução nessa mesma linha. Já tens uma ideia geral de que o programa funciona para casos simples. Como não queres pausar a execução sempre, torna o ponto de quebra condicional.

  2. Clique com o botão direito do mouse no ponto vermelho que representa o ponto de interrupção e selecione Condições. Na caixa de edição da condição, digite (y == 0) && (oper == '/'). Selecione o botão Fechar quando terminar para salvar a condição de ponto de interrupção.

    Captura de ecrã que mostra a janela do ponto de interrupção condicional.

    O ponto de interrupção está na linha: resultado = c ponto Calcular ( x, oper, y). «Condições...» A opção Condição está marcada. O menu suspenso Condições está definido para "Expressão condicional". A lista suspensa de condições é definida como "É verdadeiro". A condição é definida como y == 0 && oper == '/'.

    A execução é interrompida no ponto de interrupção se for efetuada uma tentativa de divisão por 0.

  3. Para depurar o programa, pressione F5 ou selecione o botão da barra de ferramentas Depurador Local do Windows que tem o ícone de seta verde. Na tua aplicação de consola, se inserires algo como 5 - 0, o programa comporta-se normalmente e continua a correr. No entanto, se introduzires 10 / 0, faz uma pausa no ponto de interrupção. Você pode até mesmo colocar qualquer número de espaços entre o operador e números; cin é inteligente o suficiente para analisar a entrada adequadamente.

    Captura de ecrã a mostrar a execução do programa pausada no ponto de interrupção condicional.

    O utilizador introduz 5 - 0. A aplicação exibe: O resultado é 5. O usuário então insere 10/0 e, como a condição para o ponto de interrupção condicional é atendida, a execução para na linha: result = c.Calculate(x, oper, y);

Janelas úteis no depurador

Quando depuras o teu código, podes notar que aparecem algumas janelas novas. Essas janelas podem melhorar a sua experiência de depuração. Dê uma olhada na janela Autos . A janela Autos mostra os valores atuais das variáveis usadas pelo menos três linhas antes e até a linha atual. Se não vires a janela Autos, no menu principal, seleciona Debug>Windows>Autos.

Captura de ecrã da janela Autos do depurador do Visual Studio.

O valor de oper é 47 '/', resultado é 5, x é 10 e y é 0.

Para ver todas as variáveis dessa função, alterne para a janela Locais . Como esta função é pequena, as janelas Autos e Locais mostram as mesmas variáveis. Mas você pode modificar os valores dessas variáveis durante a depuração, para ver o efeito que elas teriam no programa. Neste caso, deixa-os em paz. Abra a janela Locais selecionando Locais na parte inferior da janela Automáticos ou selecionando no menu principal Depurar>Locais do>.

Captura de tela da janela Locais no Visual Studio, exibindo os valores atuais de variáveis locais durante a depuração.

O valor de oper é 47 '/', o resultado é 0, x é 10 e y é 0.

Você também pode passar o mouse sobre variáveis no próprio código para ver seus valores atuais onde a execução está pausada no momento. Selecione primeiro a janela do editor para garantir que está em foco.

Captura de ecrã que demonstra uma dica de ferramenta que aparece enquanto se passa o rato sobre a variável y, que mostra o valor atual de y, que é 0.

Continuar a depuração

  1. A seta amarela à esquerda mostra o ponto atual de execução. A linha atual chama Calculate, então pressione F11 para entrar na função, que leva você para o corpo da Calculate função. Tenha cuidado com o Step Into porque ele entra em todas as funções na linha em que você está, incluindo funções padrão da biblioteca. Não há problema em entrar na biblioteca padrão, mas talvez estejas mais interessado em focar-te no teu código do que no código da biblioteca.

  2. Agora que o ponto de execução está no início da Calculate função, pressione F10 para passar para a próxima linha na execução do programa. F10 também é conhecido como Step Over. Você pode usar Step Over para mover de linha em linha, sem se aprofundar nos detalhes do que está ocorrendo em cada parte da linha. Em geral, deves usar Step Over em vez de Step In, a menos que queiras aprofundar mais o código que está a ser chamado de outro lado (como fizeste para chegar ao corpo de Calculate).

  3. Continue usando F10 para avançar cada linha até voltar para a main() função no outro ficheiro e parar na cout linha.

    O programa está a fazer o que esperas: pega no primeiro número e divide-o pelo segundo. Na cout linha, passe o mouse sobre a result variável ou dê uma olhada no result na janela Autos. Seu valor é inf, o que não parece certo.

    Captura de tela da depuração da calculadora.

    A instrução atual no depurador é cout << "Result is: " << result << endl; Na janela autos, o resultado é inf.

    Tu consegues resolver isso. A cout linha produz qualquer valor armazenado no result, portanto, quando você avança mais uma linha usando F10, a janela do console exibe:

    Captura de tela do Visual Studio Debug Console exibindo o resultado de uma operação de divisão por zero.

    O aplicativo indica: Insira a operação a realizar. Formato: a+b | a-b | a*b | a/b. O utilizador introduziu 5-0. A saída da aplicação: O resultado é: 5. O usuário digitou 10/0. A saída do aplicativo: O resultado é: inf

    Esse resultado ocorre porque a divisão por zero é indefinida, de modo que o programa não tem uma resposta numérica para a operação solicitada.

Corrigir o erro "dividir por zero"

Trate a divisão por zero de forma mais elegante para que seja mais fácil para o utilizador compreender o problema.

  1. Faça as seguintes alterações no CalculatorTutorial.cpp. Você pode deixar o programa em execução enquanto edita, graças a um recurso de depurador chamado Editar e Continuar. A mudança é adicionar uma if instrução após cin >> x >> oper >> y; para verificar a divisão por zero e enviar uma mensagem para o utilizador se isso acontecer. Caso contrário, o resultado é impresso:

    // 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. Pressione F5 uma vez. A execução do programa continua até que ele tenha que pausar para solicitar a entrada do usuário. Entre 10 / 0 novamente. Agora, uma mensagem mais útil é impressa. O utilizador é solicitado a fornecer mais informações, e o programa continua a executar-se normalmente.

    Vídeo do Console de Depuração mostrando o resultado final após as alterações de código. 10 / 0 é inserido e o programa exibe 'Divisão por 0 exceção'.

    Observação

    Quando você edita o código enquanto está no modo de depuração, há um risco de o código ficar obsoleto. Isso acontece quando o depurador ainda está executando seu código antigo e ainda não o atualizou com suas alterações. O depurador apresenta uma caixa de diálogo para o informar de quando isso acontece. Por vezes, tens de carregar em F5 para atualizar o código que está a ser executado.

    Em particular, se você fizer uma alteração dentro de uma função enquanto o ponto de execução estiver dentro dessa função, saia da função e, em seguida, volte para ela novamente para obter o código atualizado. Se isso não funcionar por algum motivo e vir uma mensagem de erro, selecione o quadrado vermelho para parar a depuração e comece novamente a introduzir F5 ou escolhendo a seta verde "play" ao lado do botão de parar na barra de ferramentas.

    Outra razão pela qual editar e continuar pode falhar é que tens de ir ao menu principal e selecionar Ferramentas>Opções>de Depuração>Geral e garantir que Exigir ficheiros fonte correspondam exatamente à versão original está assinalado.

    Noções básicas sobre os atalhos Executar e Depurar

    • F5, ou Debug>Start Debugging, inicia uma sessão de depuração, se ainda não estiver ativa, e executa o programa até que um ponto de interrupção seja atingido ou o programa precise da entrada do usuário. Se nenhuma entrada do usuário for necessária e nenhum ponto de interrupção estiver disponível para ser atingido, o programa será encerrado e a janela do console se fechará quando o programa terminar de ser executado. Se o programa for enviado para o console, use Ctrl+F5 ou defina um ponto de interrupção antes de pressionar F5 para manter a janela aberta.
    • Ctrl+F5, ou Debug>Start Without Debugging, executa o aplicativo sem entrar no modo de depuração. Isso é um pouco mais rápido do que a depuração, e a janela do console permanece aberta depois de o programa terminar de ser executado.
    • F10, conhecido como Step Over, permite iterar através do código, linha por linha, e visualizar como o código é executado e quais valores de variáveis estão em cada etapa de execução.
    • F11, conhecido como Step Into, funciona de forma semelhante ao Step Over, exceto que entra em quaisquer funções chamadas na linha de execução. Por exemplo, se a linha que está sendo executada chamar uma função, pressionar F11 move o ponteiro para o corpo da função, para que você possa seguir o código da função que está sendo executado antes de voltar para a linha em que você começou. Pressionando F10 executa a chamada de função e apenas se move para a próxima linha; a chamada da função ainda ocorre, mas o programa não pausa para mostrar o que está a fazer.

Fechar a aplicação

  • Se ainda estiver em execução, feche a janela do console para parar o aplicativo da calculadora.

A aplicação concluída

Parabéns! Você concluiu o código para o aplicativo de calculadora e criou-o e depurou-o no Visual Studio.

Passo seguinte

Saiba mais sobre o Visual Studio para C++